jQuery: Comment puis-je ajouter un gestionnaire d'événements click pour une classe et de savoir quel élément a été cliqué?
J'ai été en utilisant la méthode suivante pour ajouter un événement click d'un id, je me demandais si je pouvais faire la même chose avec une classe.... J'ai un certain nombre d'éléments (qui sont créés dans une boucle for each) et j'ai besoin d'être en mesure de cliquer dessus puis de ramassage qui a cliqué... voici mon code existant
$('submit-button').bind('click', submit_click);
function submit_click() {
alert('I am clicked');
}
Je me demandais si il est possible de passer une variable dans ma fonction pour le clic afin que je puisse vérifier l'ID?? ou similaire
donc ce
function submit_click(element) { //notice element
alert(element + ' clicked');
}
Toute aide vraiment apprécié
Merci
MODIFIER
J'ai essayé ce qui suit, et en debug "elem" n'est pas défini...
$('.clear').bind('click', clear_click($(this)));
function clear_click(elem)
{
alert(elem.attr("id"));
}
SOLUTION DE TRAVAIL
J'ai la solution de travail, mais je ne comprends pas tout pourquoi, j'aimerais savoir pourquoi cela fonctionne..
Tout d'abord j'ai essayé
$('.clear').bind('click', clear_click($(this)) );
Cela semblait fonctionner "MAIS" quand j'ai chargé la page, entrez le "clear_click" méthode sans être cliqué étrange...
Ensuite j'ai essayé ce..
$('.clear').bind('click', function() { clear_click($(this)) } );
Cela fonctionne très bien! Mais je ne comprends pas pourquoi je dois passer une fonction et au sein de cet appel de fonction mon clear_click.
Quelqu'un peut-il expliquer pourquoi 1 travaille et que l'autre ne l'est pas?
Chaque fois que j'ai besoin d'appeler une fonction de rappel ou similaire, je dois d'abord ouvrir une fonction (), puis appelez la méthode à l'intérieur de la fonction?
OriginalL'auteur mark smith | 2009-12-16
Vous devez vous connecter pour publier un commentaire.
et vous pouvez de code comme ceci
Modifier
Cela fonctionne correctement pour vous.
Que vous adamantium!! Cela a fonctionné... même si j'ai une question, si vous pouviez m'aider... je mettre à jour ma question avec info. Merci d'avance
OriginalL'auteur rahul
Mise à jour
Pour répondre à votre deuxième question:
Vous pouvez lier une fonction en tant que deuxième argument lors de l'utilisation de l'événement de clic, mais tu ne peux pas lier une fonction et d'appliquer des arguments. D'autre part, il n'est pas nécessaire d'envoyer
this
comme un argument de la clear_click fonction depuis lethis
mot-clé à l'intérieur de la fonction fait référence à l'élément lui-même:Donc ce qui fonctionne dans votre cas:
Envoi de ce qu'un argument n'est pas nécessaire et le mauvais codage:
$('.clear').bind('click', clear_click(this));
Dans le gestionnaire d'événements, le premier argument est l'objet de l'événement. Vous pouvez extraire l'élément cliqué à partir de cet objet à l'aide de
currentTarget
outarget
. En jQuery, ce se réfère toujours à la currentTarget dans le gestionnaire d'événements contexte:Plus d'exemples:
OriginalL'auteur David Hellsing
Juste ajouter $(this) à votre fonction, Vous n'avez pas besoin d'envoyer tous les paramètres car vous êtes toujours dans le contexte de l'élément cliqué.
OriginalL'auteur JOBG
Lorsque vous liez un gestionnaire à une fonction, l'élément cliqué sera le premier argument
Correct -
this
est l'élément qui a été cliquéOriginalL'auteur czarchaic
Cela devrait fonctionner:
Désolé, j'ai copié ton code dans lequel le sélecteur de classe manquait le '.' J'ai édité mon code pour résoudre ce problème.
La deuxième arg à
bind
doit être une référence de fonction - vous êtes de passage le calculées résultat de lasubmit_click
au lieu de cela, ce qui n'est pas définiOui, ça doit être enveloppé dans un bloc de fonction.
OriginalL'auteur Jim Schubert