Ich habe ein Kontrollkästchen, das unter bestimmten Bedingungen deaktiviert werden muss. Es stellt sich heraus, dass HTTP keine deaktivierten Eingaben veröffentlicht.
Wie kann ich das umgehen? Senden der Eingabe, auch wenn sie deaktiviert ist, und Beibehalten der Eingabe deaktiviert?
html
forms
html-input
Ein Lehrling
quelle
quelle
Antworten:
UPDATE : Funktioniert
READONLY
nicht bei KontrollkästchenSie können verwenden,
disabled="disabled"
aber an diesem Punkt wird der Wert des Kontrollkästchens nicht inPOST
Werten angezeigt. Eine der Strategien besteht darin, ein verstecktes Feld hinzuzufügen, das den Wert des Kontrollkästchens im selben Formular enthält, und den Wert aus diesem Feld zurückzulesenEinfach wechselndisabled
zureadonly
quelle
<input name="foo" value="bar" readonly="readonly" />
readonly
funktioniert nicht, da Sie den Wert eines Kontrollkästchens mit einem solchen Tag nicht veröffentlichen können. Verwenden Sie esdisabled
zusammen mit dem versteckten Eingabeelement, um den Wert des Kontrollkästchens zu speichern.Ich habe das Problem gelöst.
Da das
readonly="readonly"
Tag nicht funktioniert (ich habe verschiedene Browser ausprobiert), müssen Siedisabled="disabled"
stattdessen verwenden. Aber der Wert Ihres Kontrollkästchens wird dann nicht veröffentlicht ...Hier ist meine Lösung:
Fügen Sie einfach eine versteckte "Eingabe" mit demselben Namen und Wert wie Ihr Kontrollkästchen hinzu, um das "schreibgeschützte" Aussehen und den Wert des POST- Kontrollkästchens gleichzeitig zu erhalten . Sie müssen es neben Ihrem Kontrollkästchen oder zwischen denselben Tags aufbewahren:
<form></form>
Auch nur um dich wissen zu lassen
readonly="readonly", readonly="true", readonly="",
oder einfachREADONLY
NICHT zu lösen! Ich habe ein paar Stunden damit verbracht, es herauszufinden!Diese Referenz ist auch NICHT relevant (möglicherweise noch nicht oder nicht mehr, ich habe keine Ahnung): http://www.w3schools.com/tags/att_input_readonly.asp
quelle
Wenn Sie mit JQuery zufrieden sind, entfernen Sie das deaktivierte Attribut, wenn Sie das Formular senden:
quelle
<select>
oder<textfield>
oder andere HTML - Elemente, die das unterstützendisabled
Attribut, können Sie sie auswählen und aktivieren Sie alle mit:$( "*:disabled" ).removeAttr("disabled");
Sie könnten so vorgehen ... Erstellen Sie für jedes Kontrollkästchen ein verstecktes Feld mit demselben
name
Attribut. Legen Sie jedoch den Wert dieses ausgeblendeten Felds mit einem Standardwert fest, mit dem Sie testen können. Beispielsweise..Wenn das Kontrollkästchen beim Senden des Formulars "aktiviert" ist, lautet der Wert dieses Formularparameters
Wenn das Kontrollkästchen nicht aktiviert ist, lautet der Wert
Sie könnten einen beliebigen Wert anstelle von "false" verwenden, aber Sie haben die Idee.
quelle
Ich ging von dem Problem aus: "Wie poste / sende ich ein deaktiviertes Eingabe-Kontrollkästchen?" und in meiner Antwort habe ich den Kommentar übersprungen: "Wenn wir ein Kontrollkästchen deaktivieren möchten, müssen wir sicher einen Präfixwert beibehalten (aktiviert oder deaktiviert) und wir möchten, dass der Benutzer davon Kenntnis hat (andernfalls sollten wir einen versteckten Typ und verwenden." kein Kontrollkästchen) ". In meiner Antwort nahm ich an, dass wir immer ein Kontrollkästchen aktivieren möchten und dass der Code auf diese Weise funktioniert. Wenn wir auf diese Ckeckbox klicken, wird sie für immer überprüft und ihr Wert wird VERÖFFENTLICHT / übermittelt! Auf die gleiche Weise wird, wenn ich onclick = "this.checked = false" schreibe, ohne "checked" = "Checked" (Hinweis: Standard ist deaktiviert), wird es für immer deaktiviert und sein Wert wird nicht POSTED / Submitted!.
quelle
Erstellen Sie eine CSS-Klasse, z.
Wenden Sie diese Klasse anstelle des deaktivierten Attributs an
quelle
Der einfachste Weg dazu ist:
Dadurch wird verhindert, dass der Benutzer dieses Kontrollkästchen deaktivieren kann, und es wird weiterhin sein Wert gesendet, wenn das Formular gesendet wird. Entfernen Sie das Kontrollkästchen, wenn der Benutzer dieses Kontrollkästchen nicht aktivieren soll.
Sie können dann auch Javascript verwenden, um den Onclick zu löschen, sobald eine bestimmte Bedingung erfüllt ist (wenn Sie danach suchen). Hier ist eine schmutzige Geige, die zeigt, was ich meine. Es ist nicht perfekt, aber Sie verstehen das Wesentliche.
http://jsfiddle.net/vwUUc/
quelle
Das funktioniert wie ein Zauber:
Der einzige Nachteil ist das kurze Aufleuchten der deaktivierten Eingabefelder beim Senden. Zumindest in meinem Szenario ist das kein großes Problem!
quelle
Deaktiviere es nicht; Stellen Sie es stattdessen auf schreibgeschützt ein, obwohl dies keine Auswirkung hat, da der Benutzer den Status nicht ändern kann. Sie können jQuery jedoch verwenden, um dies zu erzwingen (verhindern Sie, dass der Benutzer den Status des Kontrollkästchens ändert:
Dies setzt voraus, dass alle Kontrollkästchen, die Sie nicht ändern möchten, das Attribut "schreibgeschützt" haben. z.B.
quelle
Schon seit:
Ich werde Ihnen eine andere Möglichkeit anbieten:
Setzen Sie Ihr Kontrollkästchen wie gewohnt deaktiviert. Und bevor das Formular vom Benutzer gesendet wird, aktivieren Sie dieses Kontrollkästchen mit JavaScript.
Da das Kontrollkästchen aktiviert ist, bevor das Formular gesendet wird, wird sein Wert auf übliche Weise gebucht. Das einzige, was an dieser Lösung nicht sehr angenehm ist, ist, dass dieses Kontrollkästchen für eine Weile aktiviert ist und von den Benutzern gesehen werden kann. Aber es ist nur ein Detail, mit dem ich leben kann.
quelle
Leider gibt es keine "einfache" Lösung. Das Attribut readonly kann nicht auf Kontrollkästchen angewendet werden. Ich habe die W3-Spezifikation über das Kontrollkästchen gelesen und den Schuldigen gefunden:
Wenn ein Steuerelement beim Senden des Formulars keinen aktuellen Wert hat, müssen Benutzeragenten es nicht als erfolgreiches Steuerelement behandeln. ( http://www.w3.org/TR/html401/interact/forms.html#h-17.13.2 )
Dies führt dazu, dass der deaktivierte und der deaktivierte Status denselben analysierten Wert ergeben.
Die einzige vollständige Möglichkeit, dies zu tun, besteht darin , beim Absenden des Formulars eine versteckte Eingabe mit demselben Namen und Javascript hinzuzufügen .
Sie können das kleine Snippet verwenden, das ich dafür gemacht habe:
Dies sucht nach dem ersten Formular im Dokument, sammelt alle Eingaben und sucht nach deaktivierten Eingaben. Wenn eine deaktivierte Eingabe gefunden wird, wird im parentNode eine versteckte Eingabe mit demselben Namen und dem Wert 'on' (wenn der Status 'geprüft' ist) und '' (wenn der Status '' ist - nicht geprüft) erstellt.
Diese Funktion sollte durch das Ereignis 'onsubmit' im FORM-Element ausgelöst werden als:
quelle
onsubmit="this['*nameofyourcheckbox*'].disabled=false"
Zum Formular hinzufügen .quelle
Es gibt keine andere Option als ein
hidden
Feld. Versuchen Sie daher, einhidden
Feld zu verwenden, wie im folgenden Code gezeigt:quelle
Die Funktion some_name ist ein Beispiel für eine vorherige Klausel zum Verwalten des zweiten Kontrollkästchens, das gemäß der Klausel aktiviert (veröffentlicht seinen Wert) oder deaktiviert (veröffentlicht seinen Wert nicht) ist und der Benutzer seinen Status nicht ändern kann. Das Deaktivieren des zweiten Kontrollkästchens muss nicht verwaltet werden
quelle
Sie können es wie gewünscht deaktiviert lassen und dann das deaktivierte Attribut entfernen, bevor das Formular gesendet wird.
quelle
Hinzufügen
onclick="this.checked=true"
Löse mein Problem:Beispiel:
quelle
Hier ist eine weitere Problemumgehung, die vom Backend aus gesteuert werden kann.
ASPX
In ASPX.CS
Klasse wird nur für Stilzwecke hinzugefügt.
quelle
Ich habe gerade die HTML-, JS- und CSS-Vorschläge in den Antworten hier kombiniert
HTML:
jQuery:
CSS:
Da das Element nicht deaktiviert ist, durchläuft es weiterhin den POST.
quelle