2009-03-08 3 views
2

Mit XHTML 1.1 arbeitenWarum sind Checkboxen/Radiobuttons und Optionen nicht rücksetzbar, wenn sie von PHP gesetzt wurden?

Ich habe diese Anmeldeseite in php verwaltet. Es enthält mehrere Kontrollkästchen, Radiobuttons und eine Dropdown-Liste.

Es gibt eine Menge Formchecking dahinter und wenn etwas nicht auscheckt, wird die Seite neu geladen und alle Werte werden wieder an ihren Platz gefüllt, außer für Passwörter.

Dies bedeutet, dass die ausgewählten Elemente <select>, <input type="radio" und <input type="checkbox" erneut ausgewählt werden.

Wenn ich mir den Quellcode anschaue, fehlen die Teile checked="checked" und selected="selected". Aber wenn Sie sehen, wie die neu geladene Seite sie ausgewählt hat, müssen sie implementiert worden sein.

Doch wenn ich auf meine <input type="reset" Schaltfläche klicke, passiert nichts. Die werden nicht abgewählt.

Spaß Sache ist, wenn ich einige andere Kontrollkästchen, Radiobuttons und ändern Sie die Auswahl, funktioniert das Zurücksetzen funktioniert, aber nur auf die neu angeklickten Kontrollkästchen und Radiobuttons.

Noch seltsamer ist die Tatsache, dass, wenn ich auf Reset, die Radiobuttons, Kontrollkästchen und Selects nicht selbst löschen, sie springen zu dem, der überprüft oder ausgewählt wurde, wenn PHP die Seite neu laden.

Was geht hier vor?

Mit Firefox übrigens, IE jetzt überprüfen.

EDIT: IE dasselbe Problem.

+0

IE unterstützt XHTML/1.1 nicht. Wenn die Seite im IE geöffnet wird, handelt es sich nicht um XHTML. – Kornel

Antwort

2

Wenn Sie "View Source" verwenden und das Skript aggressive no-cache Header setzt, ist es möglich, dass Sie den Quellcode nicht sehen, was angezeigt wird. Versuchen Sie es in etwas, das das Live-DOM zeigt, wie Firebug oder den DOM Inspector.

+0

Danke, Firebug macht den Trick, es zeigt den checked = "checked" Code. Immer noch keine Verbesserungen mit dem Reset-Buttong obwohl ... – Vordreller

+0

Es klingt wie du bist missverstanden, was der Reset-Taste ist. Alles, was es tut, ist, die Formularfelder in ihren Zustand zurückzuversetzen, wenn die Seite geladen ist, es werden nicht alle gelöscht. Wenn Sie möchten, dass Sie Javascript benötigen. – flussence

+0

Es ist nur ein Missverständnis, dann dachte ich, der Reset-Knopf würde sich nicht so verhalten, wie er sollte. – Vordreller

0

(Welche Browser?)

Unabhängig davon, dieses Verhalten (nicht alle Steuerelemente Zurücksetzen) ist von Entwurf, sonst Surfen und Formen in der Web-Füllung würde eine schreckliche Erfahrung sein (wo die meisten Formen durch einen Reset wurden einziger Fehler).

Es gibt auch Aktualisierung (wie F5) und "echte" Aktualisierung (Ctrl-F5), die die Seite immer vollständig zurückgesetzt wird.

1

Wenn Ihr Code nach dem PHP-Reload die checked = "checked" und selected = "selected" -Attribute nicht enthält, dann ist die einzige Erklärung, dass sie ausgewählt sind, dass Ihr Browser sich ihre Werte erinnert und sie wiederhergestellt hat. Das würde wahrscheinlich auch den Rest des Verhaltens erklären. Ich würde vorschlagen, sicherzustellen, dass der PHP-Code die geprüften/ausgewählten Attribute korrekt erzeugt und der Rest sollte für sich selbst sorgen.

+0

Ich debuggte den PHP-Code und es gab einen Fehler darin. Behoben, dass die Variablen die richtige Zeichenfolge zur Eingabe erhielten und wenn die Seite geladen wurde, ist sie immer noch nicht da. Ich benutze übrigens Firefox. – Vordreller

0

Ich bin nicht sicher, die Ursache für alle Ihre Probleme, aber ich werde Ihnen eine kurze Pause darüber geben, wie JavaScripts Standard Form Reset-Methode funktioniert.

Sagen Sie bitte die folgende Form haben:

<form id="myForm> 
    <input type="text" name="textField1" value="" /> 
    <input type="text" name="textField2" value="test1" /> 
    <input type="text" name="textField3" value="test2" /> 

    <input type="checkbox" name="checkbox1" value="box1" /> 
    <input type="checkbox" name="checkbox2" value="box2" checked /> 
</form> 

Und in TextField1 setzen Sie Foo Und in TextField2 setzen Sie Bar Und in TextField2 setzen Sie Baz

Und Sie abhaken dann beide Kontrollkästchen . zurückgesetzt dann das Formular

myForm.reset(); 

Die Felder Form haben nun die folgenden:

TextField1 = "" TextField2 = "test1" TextField3 = "test2"

checkbox1 = NICHT aktiviert checkbox2 = checked

Was passiert, ist die Reset-Methode "löscht" nicht die Form, die es zurücksetzt, was alle Standardwerte für das Formular waren.

Hoffe, das hilft ein bisschen.

Verwandte Themen