2010-05-18 8 views
0

Je souhaite utiliser l'argument que je passe (this) dans une fonction JS et le traiter comme une variable jQuery. Exemple:Utilisation de l'argument (this) passé via l'élément eventhandler

<script>  
function useMe(obj){ 
    $(obj).val(); 
    ... 
    ... 
    ... 
} 
</script> 


<select id="selectid" onChange="useMe(this)"> 
    <option>......</option> 
</select> 

Est-il possible de traiter l'argument passé comme un élément jQuery?

Btw. Je dois le faire de cette façon, car l'élément select n'est pas créé en charge. L'élément select sera créé plus tard de manière asynchrone.

Donc, cela ne fonctionnera pas:

$("select").each(function (i){ 
    var select_id = $(this).attr("id");     
    $(this).change(function(e){ 

parce qu'il n'existe pas encore.

Merci pour votre aide.

+0

Vous Si vous pouviez utiliser votre solution jQuery, il vous suffirait d'exécuter le script une fois l'appel ajax terminé. – Nalum

Répondre

2

Si votre élément est pas créé sur la charge, et au lieu chargé de manière asynchrone, vous pouvez lier l'événement de changement comme celui-ci:

$('select').live('change',function(){ 
    // ... 
}); 

Cela lie la fonction définie à l'événement de changement sur tous les existants et sur chaque nouvel article sélectionné.

Mise à jour: Vous devez au moins 1.4.1 jQuery pour cette

+0

génial cela fonctionne merci – Kel

+0

vous êtes les bienvenus – jigfox

+0

ça marche pour IE6 MISE À JOUR:! trouvé ceci: http://stackoverflow.com/questions/1451760/jquery-live-change-in-not-working-in-ie6-ie7 – Kel

0

Si l'élément n'existe pas lors du chargement du document, cela signifie qu'il est ajouté ultérieurement par un appel AJAX. Si c'est le cas, mettez simplement l'enregistrement de la poignée change dans le rappel success.

$.ajax({ 
    url: '/somescript', 
    success: function() { 
     // some code that injects the select into the DOM 
     // ... 
     $("select").each(function(i) { 
      var select_id = $(this).attr("id");     
      $(this).change(function(e) { 
       // ... 
      }); 
     }); 
    } 
}); 
+0

cool merci. J'ai toujours une question. Où dois-je insérer ce code? Dans le fichier qui charge le fichier ou dans le fichier chargé (ajax)? – Kel

+0

vous devriez déjà avoir ce code quelque part. le seul code que vous devez insérer est '$ (" select) ... 'au sein de la fonction appelée sur le succès – jigfox

0

Si vous choisissez de rester avec votre onchange attribut (que je vous conseille contre), il suffit d'utiliser:

<script>  
function useMe($obj){ 
    $obj.val(); 
    ... 
    ... 
    ... 
} 
</script> 

<select id="selectid" onChange="useMe($(this))"> 
    <option>......</option> 
</select>