2010-07-12 5 views
2

Je souhaite transmettre une référence de l'objet DOM à une fonction jQuery. Cependant, la fonction n'obtient pas de référence à l'objet DOM. Il obtient une chaîne contenant l'objet DOM. Donc, je reçois une erreur sur l'exemple suivantComment passer une référence d'objet DOM à la fonction jQuery?

<input type="text" size="30" onchange="change_total_price(this)" id="priceField"> 

.

function change_total_price(input) { 
    input.closest('div').find('#amountField').val()); 
} 

Répondre

12

Vous devez envelopper, comme ceci:

function change_total_price(input) { 
    var val = $(input).closest('div').find('#amountField').val(); 
} 

this, étant input dans la fonction est un élément DOM, mais .closest() est une méthode d'objet jQuery donc vous devez enveloppez-le dans $() pour obtenir un objet jQuery si vous voulez l'utiliser.

faire cette alternative à l'extérieur de votre balisage, comme ceci:

$(function() { 
    $("#priceField").change(function() { 
    var val = $(this).closest('div').find('#amountField').val(); 
    }); 
}); 

De cette façon, le gestionnaire se fixe change event à l'élément id="preiceField", vous pouvez supprimer la ligne en onchange="change_total_price(this)" ... il est à la fois plus propre et plus facile à maintenir (peut être en dehors de votre page dans un .js externe chargé et mis en cache une fois, par exemple).

En aparté, les ID doivent être unique, donc il n'a pas besoin d'être relatif à tous, des exemples ci-dessus peuvent juste être:

var val = $('#amountField').val(); 
Questions connexes