2010-11-12 4 views
1

En utilisant jQuery, je modifie la valeur d'un champ de texte de saisie via un processus. Une fois le processus terminé, je dois capturer ce changement et l'appliquer à un autre processus. Mon problème est que je ne peux pas sembler saisir ce changement et l'assigner à une variable. Je sais que les changements se produisent parce que le DOM est mis à jour. De plus, cette affectation de variable fonctionne dans IE, mais pas pour les autres navigateurs que j'ai testés. Ci-dessous un extrait pour prouver mon point (et vous pouvez voir ceci en ligne ici: http://jsfiddle.net/xMwAE/).jQuery - les résultats de la manipulation DOM ne peuvent pas être affectés à une variable?

<form> 
    <input type="hidden" name="my_hidden" value="Hidden Field" /> 
    <input type="text" name="my_text" value="Text Field" /> 
</form> 


$().ready(function() { 
    $('input[name=my_hidden]').val('Hello Hidden Field'); 
    $('input[name=my_text]').val('Hello Text Field'); 

    // Display 
    var temp = $('form').html(); 

    // Though the DOM is updated with the new values. The variable temp 
    // does not capture the changes to the input text field, but captures 
    // the change in the hidden field. When in IE, temp captures the 
    // changes in both fields. 
    alert(temp); 
}); 

De toute évidence, j'ai besoin d'un comportement cohérent entre les navigateurs. Avez-vous une idée de ce qui passe?

Répondre

1

Je ne t obtenir une idée de confiance de ce qui se passe, mais il devrait y avoir une différence entre la définition de la valeur en tant que membre (input.value) ou la définition de la valeur en tant que attribute-node.

Cela fonctionne pour moi:

$('input[name=my_text]').each(function()   
{ this.setAttribute('value','Hello Text Field');}); 

Je suppose que un bogue dans innerHTML, voir bugzilla: https://bugzilla.mozilla.org/show_bug.cgi?id=535992

+0

vous êtes un génie! semble fonctionner, ont lutté avec elle depuis quelques jours maintenant. donc je dois utiliser setAttribute cool! Merci beaucoup! Bière? lol – Aman

+0

La bière sonne bien ^^ –

0

Vous pouvez stocker les valeurs de vos champs dans un tableau et utiliser comme bon vous semble comme ceci:

var data = []; 
$('form :input').each(function(){ 
    data.push(this.value); 
}); 

Vous pouvez maintenant vérifier les valeurs comme ceci:

alert(data[0]); 
alert(data[1]); 
+0

Je suis aussi intéressé par le balisage autour. Savez-vous pourquoi cela ne fonctionne que pour les champs cachés? – Aman

+0

@AMan: Cela fonctionne pour tous les champs de saisie et pas seulement pour les champs cachés. Si vous voulez le faire fonctionner uniquement pour les champs cachés, vous devriez utiliser '$ ('form: hidden')' à la place. – Sarfraz

+0

pas ce que je voulais dire, c'est que je veux que la structure html soit stockée dans une variable javascript avec sa nouvelle valeur. Le problème est que cela ne fonctionne pas pour d'autres domaines que cachés – Aman

Questions connexes