2011-08-17 10 views
18

Mam formularz z pola tekstowego jak ten:jQuery html() nie zwraca wartości zmienionych

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

Kiedy wpisuję coś w myTextBox wartość jest dostępna z $("#myTextBox").val(), ale nie jest reprezentowana jeśli zrobić $("body").html(). Jak mogę pobrać ciąg html i zaktualizowaną wartość formularza? Dzięki!

+0

Dlaczego chcesz to zrobić? –

+0

Muszę przechowywać "migawkę" strony w momencie, gdy została ona przesłana do wygenerowania z niej pliku PDF. – Harper

+0

Kiedy otrzymasz '$ (" body "). Html()'? – ShankarSangoli

Odpowiedz

18

Można użyć funkcji .attr().

Przykład:

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

Po tym można wykonać:

$("body").html(); 

to powinno działać.

+1

Potrzebuję sposobu, aby to zrobić dla "wszystkich" elementów wejściowych w formularzu. – Harper

+0

PO będzie musiał przejść przez wszystkie dane wejściowe i zmienić ich wartość za pomocą tego, ale powinno działać. +1 –

+0

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

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

i po tym można otrzymać html

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

i to jest to.

+0

A co, jeśli ustalona wartość istnieje w ładowaniu strony HTML? Będziesz wtedy miał 2 wartości, prawda? –

+0

+1 dla @Senad, aby przeciwdziałać -1, dla rozwiązania, które jest na dobrej drodze – 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; }); 

następnie

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

Przyjęta odpowiedź nie działa dobrze w przypadku textarea. Ale to rozwiązanie działa. – abhishek77in

1

Dobrze jest jednym z najbardziej prostszy sposób to zrobić, stosując funkcję żywo na wejściu.

$(document).ready(function() { 

var checker = false; 
    $("input").live("change", function() { 
     checker = (this.defaultValue !== this.value); 
     if (checker) 
      this.defaultValue = this.value; 
    }); 
}); 
Powiązane problemy