2011-08-17 9 views
18

Ho una forma con una casella di testo come questo:jquery html() non restituisce valori modificati

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

Quando digito qualcosa in myTextBox, il valore è disponibile con $("#myTextBox").val(), ma non è rappresentato se lo faccio $("body").html(). Come posso prendere anche la stringa html e il valore del modulo aggiornato? Grazie!

+0

Perché vuoi farlo? –

+0

Ho bisogno di memorizzare una "istantanea" della pagina nel momento in cui è stata inviata per generare un PDF da essa. – Harper

+0

Quando si ottiene '$ (" body "). Html()'? – ShankarSangoli

risposta

18

È possibile utilizzare la funzione .attr().

Esempio:

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

Dopo questo si può fare il:

$("body").html(); 

Questo dovrebbe funzionare.

+1

Ho bisogno di un modo per farlo per gli elementi di input 'all' nel modulo. – Harper

+0

L'OP dovrà passare attraverso tutti gli input e modificarne il valore usando questo, ma dovrebbe funzionare. +1 –

+0

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

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

e dopo che è possibile ottenere il codice HTML

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

e che è esso.

+0

E se un valore preimpostato esiste nel caricamento HTML a pagina? Avrai 2 valori, giusto? –

+0

+1 per @Senad per neutralizzare un -1, per una soluzione che si trova sulla traccia giusta – 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; }); 

poi

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

La risposta accettata non funziona bene con textarea. Ma questa soluzione funziona. – abhishek77in

1

Beh c'è quello più semplice modo di fare questo, impiegando la funzione in diretta sull'ingresso.

$(document).ready(function() { 

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