2012-08-07 17 views
11

Básicamente, tengo un código que necesita para obtener el código HTML de un elemento principal cuando se borra cualquiera de sus elementos de entrada. Eso es bastante simple. El problema es que el HTML devuelto al llamar al html() en el elemento primario no refleja el valor actual de los elementos de entrada contenidos en él. Es decir, en Firefox o Chrome. Funciona en IE de todos los lugares.html() método incorrecto cuando el valor de entrada ha cambiado

Aquí está la jsFiddle: http://jsfiddle.net/8PJMx/15/

trate de cambiar "mundo" en el cuadro de texto a "todos" y haciendo clic en el botón. Tenga en cuenta que también estoy anexando $.now() para que pueda ver que el código se está ejecutando.

Como puede ver, $("#parent").html() no se actualiza, aunque $("#child").val() sí lo hace. para su placer visual, aquí está el código HTML:

<div id="parent">Hello <input type='text' id="child" value='world' /></div> 
<button id="separateEvent">Get HTML.</button> 
<br> 
<p>The HTML for #parent is:</p> 
<textarea id="parentsHtml" style="width:95%; height: 100px;"></textarea> 
<p>The value of #child is:</p> 
<textarea id="childsValue" style="width:95%; height: 100px;"></textarea> 

... y aquí está el código JavaScript:

$("#separateEvent").click(function() 
         { 
          $("#parentsHtml").val($("#parent").html() + "\r\[email protected]" + $.now()); 
          $("#childsValue").val($("#child").val() + "\r\[email protected]" + $.now()); 
         }); 
+2

cambiar una propiedad no cambia el código fuente HTML. ¿Qué intentas lograr con esto de todos modos? – dqhendricks

+0

Creo que vale la pena señalar que sucede lo mismo si inspecciona el elemento en las herramientas de los navegadores. Las herramientas de Chrome todavía informan un valor de "mundo" _en el HTML_, aunque el valor mismo ha cambiado. – Mathletics

+0

En mi experiencia, manipular el DOM a través de '.html()' rara vez es la mejor manera de hacer las cosas. – Blazemonger

Respuesta

11

El html value="" atributo no refleja la propiedad .value DOM (unintuitively), pero refleja la propiedad .defaultValue DOM. La propiedad .value no está serializada en HTML, pero .defaultValue es.

La entrada del usuario cambia .value, no .defaultValue.

.value sólo refleja .defaultValue cuando de dirty value flag is false

la entrada Aquí hay una solución alternativa, que también incluye un ejemplo para cajas de selección: http://jsfiddle.net/8PJMx/20/

+1

Estás en racha con estos. –

+0

Para aquellos de ustedes que experimentan este mismo problema pero con selects (desplegables), he actualizado el ejemplo de Esailija para incluirlos. Tal vez haya una mejor solución, pero este es el truco: http://jsfiddle.net/8PJMx/19/ – Grinn

+1

@Grinn en realidad los mismos principios se aplican aquí, solo con '.selected' y' .defaultSelected': http: //jsfiddle.net/8PJMx/20/ Y en caso de que te estés preguntando sobre la radio y las casillas de verificación, '.checked' y' .defaultChecked' – Esailija

Cuestiones relacionadas