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')); }