Ich dachte, sie könnten es sein, aber da ich mein Geld nicht dort hinlege, wo mein Mund war (sozusagen), scheint das Setzen des schreibgeschützten Attributs eigentlich nichts zu bewirken.
Ich möchte Disabled lieber nicht verwenden, da ich möchte, dass die aktivierten Kontrollkästchen mit dem Rest des Formulars gesendet werden. Ich möchte nur nicht, dass der Client sie unter bestimmten Umständen ändern kann.
readonly
)readonly
! Warum dann würde dieses Attribut existieren!readonly
ist nur ein clientseitiges Attribut, mit dem ein Browser eine Site ordnungsgemäß rendern und dann die richtige Anforderung daraus erstellen kann. Der Server kann und sollte dasreadonly
Attribut der gerenderten Seite nicht kennen . Es muss davon ausgegangen werden, dass die Anfrage von irgendwoher kam (und möglicherweise mit böswilligen Absichten). Verlassen Sie sich niemals auf vom Benutzer bereitgestellte Eingaben. Warum sollten Sie dennoch den Wert eines Kontrollkästchens senden, den Sie in einer Anforderung nicht bearbeiten können (wenn Sie den Wert vor dem Rendern festlegen, kennen Sie den Wert bereits, wenn die Anforderung gesendet wird, sodass Sie ihn nicht in der Anforderung übertragen müssen)readonly
, dass dort aus irgendeinem Grund ein Attribut vorhanden ist. Es hat sicherlich nichts mit der serverseitigen Implementierung zu tun. Aber es ist da, um dem Benutzer zu sagen "Hey! Dieser Wert wird hier angenommen, und / aber Sie können dies nicht ändern."Antworten:
Sie können dies verwenden:
Dies funktioniert, weil die Rückgabe von false vom Klickereignis die Fortsetzung der Ausführungskette stoppt.
quelle
checked="checked"
und nicht mit dem Javascript herumspielen. Das Javascript dient nur dazu, Mausklicks auf das Eingabeobjekt zu ignorieren und nicht den Status des Kontrollkästchens festzulegen.READONLY
Funktioniert nicht mit Kontrollkästchen, da Sie den Wert eines Felds nicht bearbeiten können. Mit einem Kontrollkästchen bearbeiten Sie jedoch tatsächlich den Status des Felds (ein || aus).Von faqs.org :
Wenn Sie
disabled
den Wert nicht verwenden möchten, ihn aber dennoch senden möchten, können Sie den Wert als ausgeblendetes Feld senden und den Inhalt nur an den Benutzer drucken, wenn dieser die Bearbeitungskriterien nicht erfüllt. z.Bquelle
Dies ist ein Kontrollkästchen, das Sie nicht ändern können:
Einfach
disabled="disabled"
als Attribut hinzufügen .Bearbeiten, um die Kommentare zu adressieren:
Wenn Sie möchten, dass die Daten zurückgesendet werden, besteht eine einfache Lösung darin, denselben Namen auf eine versteckte Eingabe anzuwenden:
Auf diese Weise dient das Kontrollkästchen, wenn es auf "deaktiviert" gesetzt ist, nur dem Zweck einer visuellen Darstellung der Daten, anstatt tatsächlich mit den Daten "verknüpft" zu werden. Im Postback wird der Wert der versteckten Eingabe gesendet, wenn das Kontrollkästchen deaktiviert ist.
quelle
Sie MÜSSEN jedoch unbedingt die Daten auf dem Server validieren, um sicherzustellen, dass sie nicht geändert wurden.
quelle
eine andere "einfache Lösung":
quelle
name
undvalue
Attribute aus dem Dummy-Box, auch="checked"
und="diabled"
attrib-Werte abgesetzt werden können. w3.org/TR/html-markup/input.checkbox.htmlDies ist ein kleines Usability-Problem.
Wenn Sie ein Kontrollkästchen anzeigen möchten, es aber nicht interagieren lassen möchten, warum dann überhaupt ein Kontrollkästchen?
Mein Ansatz wäre jedoch, deaktiviert zu verwenden (Der Benutzer erwartet, dass ein deaktiviertes Kontrollkästchen nicht bearbeitet werden kann, anstatt JS zu verwenden, damit ein aktiviertes Kontrollkästchen nicht funktioniert) und einen Formularübermittlungs-Handler mit Javascript hinzuzufügen, der Kontrollkästchen direkt vor dem Formular aktiviert eingereicht. Auf diese Weise erhalten Sie Ihre Werte veröffentlicht.
dh so etwas:
quelle
mit jquery:
Es könnte dennoch eine gute Idee sein, einen visuellen Hinweis (CSS, Text, ...) zu geben, dass das Steuerelement keine Eingaben akzeptiert.
quelle
$(':checkbox[readonly]')
Auswahl sollte darin bestehen, alle Kontrollkästchen für Kandidaten zu aktivieren, da derreadonly
Attributwert optional ist.Ich habe dies verwendet, um die Ergebnisse zu erzielen:
quelle
Ich habe zufällig die unten angegebene Lösung bemerkt. In fand es meine Recherche für das gleiche Thema. Ich weiß nicht, wer es gepostet hat, aber es wurde nicht von mir gemacht. Es verwendet jQuery:
Dadurch würden die Kontrollkästchen schreibgeschützt, was hilfreich wäre, um dem Client schreibgeschützte Daten anzuzeigen.
quelle
quelle
onclick="javascript: return true;"
es verhält sich einfach wie ein normales Kontrollkästchen. Tipps? Vielen Dank!checked
Attribut hinzu und bleibefalse
an Ort und Stelle.Verspätete Antwort, aber die meisten Antworten scheinen es zu komplizieren.
So wie ich es verstehe, wollte das OP im Grunde:
Es sollte angemerkt werden, dass:
disabled
Attribut nicht zu verwenden , da die aktivierten Kontrollkästchen zusammen mit dem Rest des Formulars gesendet werden sollen.yes
oderfalse
, sondern kann ein beliebiger Text sein.Da das
readonly
Attribut nicht funktioniert, ist die beste Lösung, die kein Javascript erfordert, Folgendes:Also für ein markiertes Kontrollkästchen:
Für ein deaktiviertes Kontrollkästchen:
Das Hauptproblem bei deaktivierten Eingaben, insbesondere bei Kontrollkästchen, ist ihr schlechter Kontrast, der für einige mit bestimmten Sehbehinderungen ein Problem sein kann. Es kann besser sein, einen Wert durch einfache Wörter wie
Status: none
oder anzugebenStatus: implemented
, aber die oben verborgene Eingabe einzuschließen, wenn letztere verwendet wird, wie z.quelle
Die meisten aktuellen Antworten haben eines oder mehrere der folgenden Probleme:
Das Folgende ist einfach und hat keines dieser Probleme.
Wenn das Kontrollkästchen schreibgeschützt ist, wird es nicht geändert. Wenn nicht, wird es. Es wird jquery verwendet, aber wahrscheinlich verwenden Sie das bereits ...
Es klappt.
quelle
quelle
Wenn Sie möchten, dass sie mit Formular an den Server gesendet werden, aber nicht für den Benutzer interaktiv sind, können Sie sie
pointer-events: none
in CSS verwenden ( funktioniert in allen modernen Browsern außer IE10- und Opera 12- ) und den Registerkartenindex festlegen-1
, um Änderungen über die Tastatur zu verhindern. Beachten Sie auch, dass Sie daslabel
Tag nicht verwenden können, da durch Klicken darauf der Status ohnehin geändert wird.quelle
for
Attribut verwenden. In diesem Fall können Sie verwendeninput[type="checkbox"][readonly] + label { pointer-events: none !important; }
.label
und hinzugefügttabindex
? Wie setzen Sie den Fokus auf ein nicht fokussierbares Element, um ein Leerzeichen darauf zu drücken?<input type="checkbox" onclick="return false" />
wird für dich arbeiten, ich benutze diesquelle
Einige der Antworten hier scheinen ein bisschen umständlich zu sein, aber hier ist ein kleiner Hack.
Dann können Sie in jquery eine von zwei Optionen auswählen:
.
Demo: http://jsfiddle.net/5WFYt/
quelle
Aufbauend auf den obigen Antworten kann dies bei Verwendung von jQuery eine gute Lösung für alle Eingaben sein:
Ich verwende dies mit Asp.Net MVC, um einige Formularelemente schreibgeschützt festzulegen. Das Obige funktioniert für Text und Kontrollkästchen, indem Sie einen übergeordneten Container wie in den folgenden Szenarien als .readonly festlegen:
quelle
quelle
Ich weiß, dass "deaktiviert" keine akzeptable Antwort ist, da die Operation möchte, dass sie veröffentlicht wird. Sie müssen jedoch immer Werte auf der Serverseite validieren, AUCH wenn Sie die Option readonly festgelegt haben. Dies liegt daran, dass Sie einen böswilligen Benutzer nicht daran hindern können, Werte mit dem Attribut readonly zu veröffentlichen.
Ich empfehle, den ursprünglichen Wert (serverseitig) zu speichern und auf deaktiviert zu setzen. Ignorieren Sie dann beim Senden des Formulars alle veröffentlichten Werte und übernehmen Sie die von Ihnen gespeicherten Originalwerte.
Es wird so aussehen und sich so verhalten, als wäre es ein schreibgeschützter Wert. Und es behandelt (ignoriert) Beiträge von böswilligen Benutzern. Du tötest 2 Fliegen mit einer Klappe.
quelle
Ich hätte die Antwort von ConroyP kommentiert, aber das erfordert 50 Ruf, den ich nicht habe. Ich habe genug Ruf, um eine weitere Antwort zu posten. Es tut uns leid.
Das Problem mit der Antwort von ConroyP ist, dass das Kontrollkästchen unveränderlich wird, indem es nicht einmal in die Seite aufgenommen wird. Obwohl Electrons_Ahoy nicht so viel vorschreibt, wäre die beste Antwort eine, bei der das unveränderliche Kontrollkästchen ähnlich aussieht, wenn nicht dasselbe wie das veränderbare Kontrollkästchen, wie es der Fall ist, wenn das Attribut "deaktiviert" angewendet wird. Eine Lösung, die die beiden Gründe anspricht, aus denen Electrons_Ahoy angibt, dass das Attribut "deaktiviert" nicht verwendet werden soll, wäre nicht unbedingt ungültig, da das Attribut "deaktiviert" verwendet wird.
Angenommen, zwei boolesche Variablen, $ checked und $ disabled:
Das Kontrollkästchen wird als aktiviert angezeigt, wenn $ check wahr ist. Das Kontrollkästchen wird als deaktiviert angezeigt, wenn $ checked false ist. Der Benutzer kann den Status des Kontrollkästchens genau dann ändern, wenn $ disabled false ist. Der Parameter "my_name" wird nicht veröffentlicht, wenn das Kontrollkästchen vom Benutzer deaktiviert ist oder nicht. Der Parameter "my_name = 1" wird veröffentlicht, wenn das Kontrollkästchen vom Benutzer aktiviert ist oder nicht. Ich glaube, das ist es, wonach Electrons_Ahoy gesucht hat.
quelle
Nein, Eingabe-Kontrollkästchen können nicht schreibgeschützt werden.
Aber Sie können sie nur mit Javascript schreibgeschützt machen!
Fügen Sie diesen Code jederzeit und überall hinzu, damit die Kontrollkästchen wie angenommen schreibgeschützt funktionieren, indem verhindert wird, dass der Benutzer ihn in irgendeiner Weise ändert.
Sie können dieses Skript jederzeit nach dem Laden von jQuery hinzufügen.
Es funktioniert für dynamisch hinzugefügte Elemente.
Es funktioniert, indem es das Klickereignis (das vor dem Änderungsereignis auftritt) für ein Element auf der Seite aufnimmt und dann prüft, ob dieses Element ein schreibgeschütztes Kontrollkästchen ist. Wenn dies der Fall ist, blockiert es die Änderung.
Es gibt so viele Wenns, dass die Leistung der Seite nicht beeinträchtigt wird.
quelle
Verwenden Sie einfach ein einfaches deaktiviertes Tag wie das folgende.
quelle
Eine alternative Idee besteht darin, ein Overlay zu verwenden und Ihre schreibgeschützten Eingaben zu vertuschen
http://pure-essence.net/2011/09/22/jquery-read-only-elements/
quelle
Wenn Sie möchten, dass ALLE Ihre Kontrollkästchen "gesperrt" sind, damit der Benutzer den Status "aktiviert" nicht ändern kann, wenn "schreibgeschützt" vorhanden ist, können Sie jQuery verwenden:
Das Coole an diesem Code ist, dass Sie das Attribut "readonly" im gesamten Code ändern können, ohne jedes Kontrollkästchen neu binden zu müssen.
Es funktioniert auch für Optionsfelder.
quelle
Der Hauptgrund, warum Benutzer ein schreibgeschütztes Kontrollkästchen und (auch) eine schreibgeschützte Funkgruppe wünschen, besteht darin, dass Informationen, die nicht geändert werden können, dem Benutzer in der eingegebenen Form wiedergegeben werden können.
OK deaktiviert wird dies tun - leider sind deaktivierte Steuerelemente nicht über die Tastatur navigierbar und verstoßen daher gegen alle Gesetze zur Barrierefreiheit. Dies ist der GRÖSSTE Hangup in HTML, den ich kenne.
quelle
Sehr, sehr spät beitragen ... aber trotzdem. Verwenden Sie beim Laden der Seite jquery, um alle Kontrollkästchen außer dem aktuell ausgewählten zu deaktivieren. Stellen Sie dann die aktuell ausgewählte als schreibgeschützt ein, damit sie ähnlich aussieht wie die deaktivierten. Der Benutzer kann den Wert nicht ändern, und der ausgewählte Wert wird weiterhin übermittelt.
quelle
Sehr spät zur Party, aber ich habe eine Antwort für MVC gefunden. (5) Ich habe die CheckBox deaktiviert und ein HiddenFor VOR dem Kontrollkästchen hinzugefügt. Wenn es also veröffentlicht wird, wird zuerst das Feld Hidden gefunden und dieser Wert verwendet. Das funktioniert.
quelle
Ich würde das schreibgeschützte Attribut verwenden
Verwenden Sie dann CSS, um Interaktionen zu deaktivieren:
Beachten Sie, dass die Verwendung der Pseudoklasse: schreibgeschützt hier nicht funktioniert.
quelle
READONLY selbst wird nicht funktionieren. Möglicherweise können Sie etwas Funky mit CSS ausführen, aber normalerweise werden sie nur deaktiviert.
WARNUNG: Wenn sie zurückgesandt werden, kann der Kunde sie ändern. Sie können sich nicht auf Readonly verlassen, um zu verhindern, dass ein Benutzer etwas ändert. Die könnten immer Geiger benutzen oder einfach das HTML mit Firebug oder so etwas ändern.
quelle
Meine Lösung ist eigentlich das Gegenteil von FlySwats Lösung, aber ich bin mir nicht sicher, ob sie für Ihre Situation funktioniert. Ich habe eine Gruppe von Kontrollkästchen und jedes hat einen onClick-Handler, der das Formular sendet (sie werden zum Ändern der Filtereinstellungen für eine Tabelle verwendet). Ich möchte nicht mehrere Klicks zulassen, da nachfolgende Klicks nach dem ersten ignoriert werden. Daher deaktiviere ich alle Kontrollkästchen nach dem ersten Klick und nach dem Absenden des Formulars:
onclick="document.forms['form1'].submit(); $('#filters input').each(function() {this.disabled = true});"
Die Kontrollkästchen befinden sich in einem span-Element mit der ID "Filter". Der zweite Teil des Codes ist eine jQuery-Anweisung, die die Kontrollkästchen durchläuft und jedes deaktiviert. Auf diese Weise werden die Kontrollkästchenwerte weiterhin über das Formular gesendet (da das Formular vor dem Deaktivieren gesendet wurde) und der Benutzer kann sie nicht ändern, bis die Seite neu geladen wird.
quelle