2012-07-03 5 views
5

Ich benutze jQuery, um Daten in einer HTML-Seite zu lesen. Auf dieser Seite habe ich ein <form> Element, das einige <input> Tags enthält, damit Benutzer ihre Werte eingeben können.
Wenn dieses Formular initialisiert wird, hat es einige Standardwerte für diese <input> Elemente. Wenn ich dieses Formular absende, verwende ich die html() Methode, um die HTML-Zeichenfolge des aktuellen Status dieser Seite abzurufen, aber ich weiß nicht, warum diese Ergebniszeichenfolge immer noch alte Werte (Standardeingabewerte) enthält, nicht die neuen.
Gibt es eine Möglichkeit, den vom Benutzer eingegebenen Wert auf diese <input> Elemente zu aktualisieren oder beizubehalten, bevor html() aufgerufen wird? Wie kann ich die Zeichenfolge, die den neuesten Wert enthält, mithilfe von jQuery-Methoden abrufen?
Vielen Dank!jQuery: html() -Funktion bekomme alte Daten im Formular

+2

wo Ihr Code ist ..! –

+0

Warum brauchen Sie * um die HTML-Zeichenfolge des aktuellen Status dieser Seite * zu erhalten? – VisioN

+0

Warum verwenden Sie HTML, um die gesamte Seite zu erhalten, scheint seltsam. Sie sollten in der Lage sein, alle Werte aus dem Formular mit serialize auszuwählen, wenn Sie danach suchen. –

Antwort

5

Allerdings ist es seltsam, was Sie versuchen zu tun, aber alles, was Sie brauchen, ist das value-Attribut der Formularelemente zu aktualisieren. Es kann mit dem folgenden Code (Put es in Form submit Handler) erfolgen:

$("form input").attr("value", function() { 
    return this.value; 
}); 

DEMO:http://jsfiddle.net/BXha6/

+0

Vielen Dank. Eigentlich hat mir dein Vorschlag nicht geholfen, dieses Problem zu lösen, aber es gab mir einen Hinweis darauf, weiterzumachen. Ich habe versucht, die Demo, die Sie auf jsfiddle erstellt, es funktionierte mit jQuery 1.7.1, aber wenn ich es auf 1.5.2 downgrade, verursachte es Fehler^_ ^. Also denke ich, dass es in jQuery 1.5.2 etwas Geheimnisvolles gibt, das ich tiefer erforschen werde. Ich habe deinen Hinweis auf einen anderen Weg angewendet: '$ (" Formulareingabe ").attr ("defaultValue", Funktion() { return this.value; }); ' und es hat super funktioniert! –

2

standardmäßig die jQuery html() Funktion wird die defaultValue und defaultChecked Eigenschaften bewahren anstatt die aktuellen Werte/Selektionen (genau wie JavaScript innerHTML). Um dies zu umgehen, müssen Sie zuerst die jQuery prop(): Read the Documentation on prop() verwenden.

Zum Beispiel den Code gegeben:

<form action='/'> 
    <input type='radio' value='1' checked name='first' /> 
    <input type='radio' value='2' name='first' /> 

    <input type='checkbox' value='yes' /> 

    <input type='text' value='Start Text' name='second' /> 
</form> 

dann

$('form').html() 

Wird immer ausgegeben, dass genaue Code, unabhängig davon, welche Werte Sie haben hinzugefügt/ausgewählt/geändert.

Um das zu beheben, nur eine Funktion ausführen des Elements Werte zu Eigenschaften konvertieren:

$("form input[type='radio']").each(function(){ 
    if (this.checked){ 
     $(this).prop("defaultChecked",true); 
    } else { 
     $(this).prop("defaultChecked",false); 
    } 
}); 
$("form input[type='checkbox']").each(function(){ 
    if (this.checked){ 
     $(this).prop("defaultChecked",true); 
    } else { 
     $(this).prop("defaultChecked",false); 
    } 
}); 
$("form input[type='text']").each(function(){ 
    $(this).prop("defaultValue",$(this).val()); 
}); 

alert($(form).html()); //or var the_code = $(form).html(); 

Sie werden nun die HTML als die aktuelle Seite Zustand ist die Anzeige haben.

0

Das TextArea- Bit ist ein bisschen anders, wenn Sie suchen, wie dieses Element Typ zu tun:

$("textarea").html(function() { 
    return this.value; 
}); 

http://jsfiddle.net/BXha6/7/

Verwandte Themen