2011-08-17 19 views
18

Tengo un formulario con un cuadro de texto así:html jQuery() no devuelve valores modificados

<html> 
<head> 
    <script type="text/javascript" src="jquery-1.6.2.js"></script> 
</head> 
<body> 
    <input type="text" id="myTextBox" /> 
</body> 
</html> 

Cuando escribo algo en myTextBox, el valor está disponible con $("#myTextBox").val(), pero no está representado si lo hago $("body").html(). ¿Cómo puedo tomar la cadena html y el valor actualizado del formulario también? ¡Gracias!

+0

¿Por qué querrías hacer eso? –

+0

Necesito almacenar una "instantánea" de la página en el momento en que se envió para generar un PDF a partir de ella. – Harper

+0

¿Cuándo obtienes '$ (" cuerpo "). Html()'? – ShankarSangoli

Respuesta

18

Puede usar la función .attr().

Ejemplo:

$("input").each(function(){ 
    $(this).attr("value", $(this).val()); 
}); 

Después de esto se puede hacer el:

$("body").html(); 

Esto debería funcionar.

+1

Necesito una forma de hacer esto para 'todos' los elementos de entrada en el formulario. – Harper

+0

El OP tendrá que pasar por todas las entradas y cambiar su valor con esto, pero debería funcionar. +1 –

+0

$ ("body"). Children(). Each (function() {$ (this) .attr ("valor", $ (this) .val());}); – Harper

2
$('input').each(function(){ 
    $(this).attr('data-value-input', $(this).val()); 
}); 

y después de que se puede obtener su html

var bodyHtml = $('body').html().toString().replace('data-value-input', 'value'); 

y eso es todo.

+0

¿Y qué pasa si existe un valor preestablecido en el HTML en la carga de la página? Tendrás 2 valores entonces, ¿verdad? –

+0

+1 para @Senad para contrarrestar un -1, para una solución que está en el camino correcto – BumbleB2na

11
$('[type=text], textarea').each(function(){ this.defaultValue = this.value; }); 
$('[type=checkbox], [type=radio]').each(function(){ this.defaultChecked = this.checked; }); 
$('select option').each(function(){ this.defaultSelected = this.selected; }); 

continuación

$("body").html() 
+0

La respuesta aceptada no funciona bien con textarea. Pero esta solución funciona – abhishek77in

1

pozo allí es más simple forma de hacer esto, mediante el empleo de la función en vivo en la entrada.

$(document).ready(function() { 

var checker = false; 
    $("input").live("change", function() { 
     checker = (this.defaultValue !== this.value); 
     if (checker) 
      this.defaultValue = this.value; 
    }); 
}); 
Cuestiones relacionadas