2010-12-10 26 views
3

Peut-être que je ne comprends pas quelque chose de basique ici, mais l'appel html() ne retourne pas un élément rempli, même après un appel explicite pour définir l'attribut.L'appel JQuery html() ne renvoie pas de valeur après forcer la mise à jour de l'attribut

Par exemple, j'ai une zone de texte:

<input type="text" id="foo" value="" /> 

Lorsque l'utilisateur remplit une valeur dans cette zone, une fonction est appelée (onBlur de zone de texte d'entrée).

$('#foo').blur(function(event) { updateFoo(this); }); 

Dans cette fonction le code suivant existe:

function updateFoo(input) { 
    // force DOM update?? 
    $('#'+input.id).attr('value', input.value); 

    // successfully displays value user entered 
    alert($('#'+input.id).attr('value')); 

    // displays input element, with value not filled in, 
    // like: 'input type="text" id="foo" value="" />' 
    alert($('#'+input.id).parent().html()); 

    ... 
} 

devrait-il pas html() Mémorisateur l'élément avec l'attribut de valeur définie? J'utilise Firefox 3.6.13 sur Max OSX.

J'ai vu ce post sur le forum: http://forums.asp.net/t/1578929.aspx que je basé certaines de mes hypothèses hors de ...

Merci, Galen

Répondre

4

Après des recherches un peu plus, j'ai couru à travers ce poste:

jQuery html() in Firefox (uses .innerHTML) ignores DOM changes

qui résume assez bien le problème que j'ai. Fondamentalement, il est une question de mise en œuvre FireFox ...

Au lieu de:

$('#'+input.id).attr('value', input.value); 

J'utilise maintenant:

input.setAttribute('value', input.value); // force DOM update 

qui a résolu le problème.

2

Je pense que cela est un effet secondaire du fait que value a une utilisation très spécialisée. J'imagine que la valeur est stockée dans une propriété locale plutôt que dans le DOM lui-même.

Si vous changez le attr à quelque chose d'autre, comme newattr, il fonctionne très bien:

http://jsfiddle.net/m9vWT/

Bien sûr, cela ne contribue pas à l'attribut value ...

+0

merci pour votre réponse. Oui, il semble que les nouveaux attributs soient bien mis à jour. J'ai résolu le problème d'une autre manière (voir ma réponse dans ce post) – Galen