Comment utiliser $ (this) dans les fonctions?

 aa bb cc   aa bb cc  function showalert(){ alert($(this).find('option:selected').attr('id')); } $("#sel").change(function(){ showalert(); }); $("#two").change(function(){ showalert(); }); 

Comment utiliser correctement $(this) dans ces fonctions? Maintenant, this est undefined.

passez $(this) à la fonction.

 function showalert(that){ alert(that.find('option:selected').attr('id')); } $("#sel").change(function(){ showalert($(this)); }); $("#two").change(function(){ showalert($(this)); }); 

Edité à partir des commentaires.

Les commentaires suggèrent de ne pas transmettre d’object jQuery et d’en déduire que cela a du sens, car il ne s’agit que de code supplémentaire et doit être refactorisé dans la méthode.

 function showalert(that){ alert($(that).find('option:selected').attr('id')); } $("#sel").change(function(){ showalert(this); }); $("#two").change(function(){ showalert(this); }); 

Il vous suffit de réécrire vos deux appels .change ainsi:

 $("#sel").change(showalert); $("#two").change(showalert); 

Il n’est pas nécessaire de “boucler” un appel à showalert dans une autre fonction – c’est déjà une référence à une fonction et jQuery veillera à this qu’il soit défini sur l’élément cible.

FWIW, les deux sélecteurs peuvent même être combinés, car ils ont le même gestionnaire:

 $("#sel,#two").change(showalert); 

De plus, vous ne devriez pas utiliser un id comme celui-ci sur vos balises . id étiquettes d’ id sont supposées être uniques dans tout le document et, jusqu’à ce que HTML5 ne soit même pas autorisé à être un nombre.

Ce devrait être l’atsortingbut value place, ou si vous l’utilisez déjà pour autre chose, un atsortingbut data-xxx .

En le laissant comme id pour le moment, votre gestionnaire devient alors

 function showalert() { alert(this.options[this.selectedIndex].id); } 

Démo de travail basée sur l’utilisation de la value sur http://jsfiddle.net/alnitak/54Pd9/

this est défini en fonction de la façon dont vous appelez la fonction

Vous devriez simplement passer l’élément this en tant que paramètre ordinaire:

 function showalert(elem) { alert($(elem).find('option:selected').attr('id')); } $("#sel").change(function(){ showalert(this); }); 

passe en paramètre comme

 function test(elem) { $(elem).text(); } 
 function showalert(elem){ alert(elem.find('option:selected').attr('id')); } $("#sel").change(function(){ showalert($(this)); }); 

Vous avez utilisé call() pour appeler showalert avec this comme contexte de fonction .

 showalert.call(this); 

Étape 1: ajoutez une référence à la bibliothèque jquery dans l’en-tête de la page.

Étape 2: écrivez ceci à l’intérieur d’une balise de script dans l’en-tête:

 $(function(){ $("#sel").change(function(){ showalert($(this)); }); $("#two").change(function(){ showalert($(this)); }); }) function showalert(x){ alert(x.find('option:selected').attr('id')); }