2011-01-09 6 views
2

Afin d'ajouter une très longue liste d'éléments d'options à une liste de sélection, je les ajoute en un clic. Je veux empêcher que la liste soit ajoutée plusieurs fois. Comment puis je faire ça?Autoriser onclick une seule fois

$("#skiresort").click(function(){ 
$("#skiresort").load("/v3/inc/review.php"); 
}); 

Répondre

7

Il existe une méthode pour exécuter un gestionnaire d'événements qu'une seule fois: .one():

$("#skiresort").one('click', function(){ 
    $("#skiresort").load("/v3/inc/review.php"); 
}); 
+0

Je veux empêcher de cliquer à nouveau sur le même bouton, mais si l'utilisateur clique sur un autre bouton, alors le bouton précédent devrait être cliquable .... Comment le faire? –

+0

@Uday: Vous pouvez utiliser une variable partagée contenant une référence au dernier bouton cliqué et comparer avec celle-ci. –

+0

Oui. Je l'ai fait finalement. Je pensais qu'il pourrait y avoir une fonction pour ça. –

2

Felix réponse est parfait pour jQuery, j'ajoute cela juste pour montrer une technique JavaScript générique pour elle:

function runOnce(f) { 
    var called = false; 
    return function() { 
    if (!called) { 
     called = true; 
     return f.apply(this, arguments); 
    } 
    }; 
} 

maintenant, vous pouvez l'utiliser comme ceci:

var myNewFunction = runOnce(myFunction); // this does not run "myFunction", but returns a new one that will only run once. 

myNewFunction(1, 2, 3); // runs the "myFunction" and returns whatever it returns 
myNewFunction(1, 2, 3); // doesn't do anything, just returns undefined 
+1

+1 bonne idée ... –