Ich möchte ein Optionsfeld anzeigen, dessen Wert übermitteln lassen, aber je nach den Umständen nicht bearbeitbar haben. Deaktiviert funktioniert nicht, da der Wert nicht übermittelt wird (oder?) Und das Optionsfeld ausgegraut ist. Schreibgeschützt ist wirklich das, wonach ich suche, aber aus irgendeinem mysteriösen Grund funktioniert es nicht.
Gibt es einen seltsamen Trick, den ich ausführen muss, damit schreibgeschützt wie erwartet funktioniert? Sollte ich es stattdessen einfach in JavaScript tun?
Weiß übrigens jemand, warum schreibgeschützt in Optionsfeldern nicht funktioniert, während es in anderen Eingabe-Tags funktioniert? Ist dies eine dieser unverständlichen Auslassungen in den HTML-Spezifikationen?
Antworten:
Ich habe schreibgeschützt ein Optionsfeld gefälscht, indem ich nur die nicht aktivierten Optionsfelder deaktiviert habe. Es verhindert, dass der Benutzer einen anderen Wert auswählt, und der aktivierte Wert wird immer beim Senden veröffentlicht.
Mit jQuery schreibgeschützt machen:
Dieser Ansatz funktionierte auch, um eine Auswahlliste schreibgeschützt zu machen, außer dass Sie jede nicht ausgewählte Option deaktivieren müssen.
quelle
readonly
Eigenschaft nutzen können, wie das OP erwartet hatte:$(':radio[readonly]:not(:checked)').attr('disabled', true);
Optionsfelder müssen nur dann schreibgeschützt sein, wenn andere Optionen verfügbar sind. Wenn Sie keine anderen Optionen haben, kann ein aktiviertes Optionsfeld nicht deaktiviert werden. Wenn Sie andere Optionen haben, können Sie verhindern, dass der Benutzer den Wert ändert, indem Sie lediglich die anderen Optionen deaktivieren:
Geige: http://jsfiddle.net/qqVGu/
quelle
onclick="return false"
, um Veränderungen zu verhindern.Dies ist der Trick, mit dem Sie gehen können.
quelle
onClick="this.checked = <%=value%>"
von irgendeiner Art sein sollte :)onclick="return false;"
, um den Wert für die Gruppe gleich zu haltenIch habe ein langes Formular (mehr als 250 Felder), das in einer Datenbank veröffentlicht wird. Es ist eine Online-Bewerbung. Wenn sich ein Administrator einen eingereichten Antrag ansieht, wird das Formular mit Daten aus der Datenbank gefüllt. Eingabetexte und Textbereiche werden durch den von ihnen eingereichten Text ersetzt, aber die Radios und Kontrollkästchen sind nützlich, um sie als Formularelemente beizubehalten. Wenn Sie sie deaktivieren, sind sie schwerer zu lesen. Das Setzen der Eigenschaft .checked auf false onclick funktioniert nicht, da sie möglicherweise vom Benutzer überprüft wurden, der die App ausfüllt. Jedenfalls...
funktioniert wie ein Zauber, um Radios und Kontrollkästchen ipso facto zu deaktivieren.
quelle
Die beste Lösung besteht darin, den aktivierten oder nicht aktivierten Status (entweder vom Client oder vom Server) festzulegen und den Benutzer nicht nach Stationen (dh schreibgeschützt) die folgenden Schritte ändern zu lassen:
quelle
Ich habe mir eine Javascript-schwere Methode ausgedacht, um einen schreibgeschützten Status für Kontrollkästchen und Optionsfelder zu erreichen. Es wird gegen aktuelle Versionen von Firefox, Opera, Safari, Google Chrome sowie gegen aktuelle und frühere Versionen von IE (bis auf IE7) getestet.
Warum nicht einfach die von Ihnen gewünschte Behindertenimmobilie nutzen? Beim Drucken der Seite werden deaktivierte Eingabeelemente in grauer Farbe angezeigt. Der Kunde, für den dies implementiert wurde, wollte, dass alle Elemente dieselbe Farbe haben.
Ich bin mir nicht sicher, ob ich den Quellcode hier posten darf, da ich ihn während meiner Arbeit für ein Unternehmen entwickelt habe, aber ich kann die Konzepte sicherlich teilen.
Bei Onmousedown-Ereignissen können Sie den Auswahlstatus lesen, bevor die Klickaktion ihn ändert. Sie speichern diese Informationen und stellen diese Zustände dann mit einem Onclick-Ereignis wieder her.
Der Javascript-Teil davon würde dann so funktionieren (wieder nur die Konzepte):
Sie können jetzt die Optionsfelder / Kontrollkästchen aktivieren / deaktivieren, indem Sie die Eigenschaften onclick und onmousedown der Eingabeelemente ändern.
quelle
JavaScript-Methode - das hat bei mir funktioniert.
Grund:
$('#YourTableId').find('*')
-> Dies gibt alle Tags zurück.$('#YourTableId').find('*').each(function () { $(this).attr("disabled", true); });
iteriert über alle darin erfassten Objekte und deaktiviert Eingabe-Tags.Analyse (Debugging):
form:radiobutton
wird intern als "Eingabe" -Tag betrachtet.Wie in der obigen Funktion (), wenn Sie versuchen zu drucken
document.write(this.tagName);
Überall dort, wo in Tags Optionsfelder gefunden werden, wird ein Eingabe-Tag zurückgegeben.
Daher kann die obige Codezeile für Optionsfeld-Tags optimiert werden, indem * durch Eingabe ersetzt wird:
$('#YourTableId').find('input').each(function () { $(this).attr("disabled", true); });
quelle
Eine ziemlich einfache Option wäre, eine Javascript-Funktion zu erstellen, die beim "onsubmit" -Ereignis des Formulars aufgerufen wird, um den Radiobutton zurück zu aktivieren, sodass sein Wert mit dem Rest des Formulars veröffentlicht wird.
Es scheint keine Auslassung in HTML-Spezifikationen zu sein, aber eine Designauswahl (eine logische, IMHO), ein Radiobutton kann nicht schreibgeschützt sein, wie es eine Schaltfläche nicht sein kann, wenn Sie sie dann nicht verwenden möchten deaktiviere es.
quelle
Ich fand, dass die Verwendung
onclick='this.checked = false;'
bis zu einem gewissen Grad funktionierte. Ein Optionsfeld, auf das geklickt wurde, wurde nicht ausgewählt. Wenn jedoch ein Optionsfeld bereits ausgewählt war (z. B. ein Standardwert), wird dieses Optionsfeld nicht mehr ausgewählt.Wenn Sie in diesem Szenario den Standardwert in Ruhe lassen und die anderen Optionsfelder deaktivieren, wird das bereits ausgewählte Optionsfeld beibehalten und verhindert, dass es nicht ausgewählt wird.
Diese Lösung ist nicht die eleganteste Methode, um zu verhindern, dass der Standardwert geändert wird. Sie funktioniert jedoch unabhängig davon, ob Javascript aktiviert ist oder nicht.
quelle
Markieren Sie die nicht ausgewählten Optionsfelder als deaktiviert. Dies verhindert, dass sie auf Benutzereingaben reagieren und das aktivierte Optionsfeld löschen. Beispielsweise:
quelle
checked="yes"
? Welche Spezifikation ist das? Verwenden Sie entwederchecked="checked"
oder nur das Attributchecked
ohne Wert. Gleiches gilt fürdisabled
.Probieren Sie das Attribut aus
disabled
, aber ich denke, Sie erhalten den Wert der Optionsfelder nicht. Oder stellen Sie stattdessen Bilder wie folgt ein:Freundliche Grüße.
quelle
Ich verwende ein JS- Plugin , das Kontrollkästchen / Funkeingabeelemente formatiert und die folgende jQuery verwendet, um einen "schreibgeschützten Status" zu erstellen, in dem der zugrunde liegende Wert noch gebucht wird, das Eingabeelement jedoch für den Benutzer unzugänglich erscheint. Dies ist meines Erachtens der beabsichtigte Grund wir würden ein schreibgeschütztes Eingabeattribut verwenden ...
quelle
Wie wäre es, ein "On_click ()" - Ereignis in JS zu erfassen und wie hier zu überprüfen?:
http://www.dynamicdrive.com/forums/showthread.php?t=33043
quelle