Warum muss die reset-Taste auf html-Formulare nicht zurücksetzen, ausgeblendete Felder?
Entdeckte ich etwas überraschendes:
<html>
<head>
<script type="text/javascript">
function f()
{
document.getElementById("h").value++;
document.getElementById("x").value++;
}
</script>
</head>
<body>
<form>
<input type="hidden" name="hidden" id="h" value="5"/>
<input type="text" id="x" value="5"/>
<input name='clear' type='reset' id='clear' value='Clear'>
</form>
<button type="button" onclick="f()">Increment</button>
<button type="button" onclick="alert(document.getElementById('h').value)">Show hidden</button>
</body>
</html>
Versuchen, diese in Firefox 4.0.1, Klick klar, immer wird der text-input zu 5
, aber nie setzt das versteckte Feld.
Ich (und andere) hatte nicht erwartet, mit diesem Verhalten überhaupt: wir erwarteten den verborgenen Wert, um wieder zu!
Kann jeder Punkt entweder in der Dokumentation oder Spezifikationen, die erklären, warum die verdeckte Eingabe wird anders behandelt, indem die reset-Taste?
Erklärungen, warum ein solches Verhalten wünschenswert ist, sind auch willkommen.
- Was ist der Wert des versteckten Feldes nach dem reset?
- das gleiche wie vor dem reset. E. g. wenn ich auf die "Increment" - Taste 5 mal wird es 10, und bleibt 10 nach klicken Sie auf zurücksetzen.
- stackoverflow.com/questions/2559616/... w3.org/Bugs/Public/show_bug.cgi?id=8506
Du musst angemeldet sein, um einen Kommentar abzugeben.
FWIW, ich denke, ich kann die gesamte Geschichte aus den Antworten und Kommentaren.
Nutzung Begründung: Die Schaltfläche "löschen" dient zum löschen von Benutzereingaben, und da versteckte Eingänge sind nicht direkt zugänglich durch den Benutzer, ist es nicht sinnvoll, dem Benutzer zu ermöglichen, die verborgene reset-Eingang Wert.
Dokumentation und Verhalten:
Die bug-report, dass AR darauf hingewiesen, explizit über das, was passiert ist: Das versteckte Feld ist
value
's-Modus ist Standard, wie es ist, in der Spezifikationen.Insbesondere bedeutet dies, dass Sie den Wert verändern (wie im Beispiel-code in der Frage) änderungen der default-Wert, und die reset-Taste setzt die Eingabe Felder auf den Standardwert, daher gibt es keine änderungen.
Das Verhalten für die Texteingabe ist das anders (obwohl sein Wert wird auch programmgesteuert geändert), weil die
value
's-Modus ist nicht Standard, aber Wert, was bedeutet, dass es einen Unterschied zwischen der default-Wert der Eingabe und dem aktuellen Wert.Kann der Benutzer nicht sehen oder ändern Sie das versteckte Feld, daher würde es keinen Sinn machen, für die Sie in der Lage sein, um es zu deaktivieren durch drücken einer Taste.
Beim Klick auf zurücksetzen, wechselt der browser und überprüfen Sie den vorgeschlagenen Wert in den DOM-Baum, nicht in der HTML-Seite.
Javascript ändert die DOM. Sie sollten versuchen, ersetzen Sie die RESET-Taste mit einem custom-Taste, ruft ein Javascript, der zwei Dinge tut:
5
.document.getElementById("x").value++;
nicht, aktualisieren Sie den Wert in das DOM für die Texteingabe.Ich bin hierher gekommen, weil ich stieß auf das gleiche Problem. Doch bei weiterer Reflexion, es ist (in der Regel) eine sehr erwünschte Verhalten.
Das versteckte Feld wird am häufigsten verwendet für die Speicherung von Informationen, die vom server gesendet, wenn die Seite geladen ist.
Obwohl, es kann auch verwendet werden, indem Sie das Skript, um einige Laufzeit-berechnet Einträge zurücksetzen von ausgeblendeten Felder können Probleme verursachen, wenn Sie nicht beabsichtigt.