Werte von deaktivierten Eingaben werden nicht übermittelt


Antworten:


189

Ja, nicht alle Browser sollten die deaktivierten Eingaben senden, da sie schreibgeschützt sind.

Weitere Informationen (Abschnitt 17.12.1)

Attributdefinitionen

disabled [CI] Wenn dieses Boolesche Attribut für ein Formularsteuerelement festgelegt ist, wird es für die Benutzereingabe deaktiviert. Wenn festgelegt, hat das Attribut disabled die folgenden Auswirkungen auf ein Element:

  • Deaktivierte Steuerelemente erhalten keinen Fokus.
  • Deaktivierte Steuerelemente werden in der Tab-Navigation übersprungen.
  • Deaktivierte Steuerelemente können nicht erfolgreich sein.

Die folgenden Elemente unterstützen das deaktivierte Attribut: BUTTON, INPUT, OPTGROUP, OPTION, SELECT und TEXTAREA.

Dieses Attribut wird vererbt, aber lokale Deklarationen überschreiben den geerbten Wert.

Wie deaktivierte Elemente gerendert werden, hängt vom Benutzeragenten ab. Beispielsweise "grauisieren" einige Benutzerprogramme deaktivierte Menüelemente, Schaltflächenbeschriftungen usw. aus.

In diesem Beispiel ist das INPUT-Element deaktiviert. Daher kann es keine Benutzereingaben empfangen und sein Wert wird auch nicht mit dem Formular übermittelt.

<INPUT disabled name="fred" value="stone">

Hinweis. Die einzige Möglichkeit, den Wert des deaktivierten Attributs dynamisch zu ändern, besteht in einem Skript.


86
Problemumgehung: Fügen Sie ein <input type="hidden">Element mit demselben Namen / Wert wie die deaktivierte Eingabe hinzu.
John Kugelman

Gibt es Informationen darüber, welcher Browser funktioniert und welcher nicht?
Allisone

82
Verwenden Sie stattdessen readonly = "readonly" :) siehe stackoverflow.com/questions/7357256/…
Adrien Be

1
@Allisone: Firefox & Chrome scheinen dies zu befolgen (deaktivierte Eingaben werden NICHT übermittelt). Ich habe es nicht mit anderen Browsern versucht.
Adrien Be

1
@ JohnKugelman warum der gleiche Name? Der Behinderte wird sowieso nicht eingereicht. Kann dem Versteckten auch den wahren Namen geben und einen anderen für den Behinderten verwenden
Arth

286

disabled Eingabe wird keine Daten senden.

Verwenden Sie das readonlyAttribut:

<input type="text" readonly />

Quelle hier


@FrankFang, Ok, aber wenn ich Daten an die Blade-Vorlage des Laravel-Kollektivs übergebe. Es wird nicht funktionieren. Daten können auf diese Weise nicht gesendet werden.
SSI-Anik

@ ssi-anik readonlyfunktioniert, stellen Sie einfach sicher, dass Sie "name" attr an die Eingabe übergeben.
BenNov

26

Sie können drei Dinge verwenden, um Behinderte nachzuahmen:

  1. HTML: readonlyAttribut (damit der in der Eingabe vorhandene Wert bei der Formularübermittlung verwendet werden kann. Außerdem kann der Benutzer den Eingabewert nicht ändern)

  2. CSS: 'pointer-events':'none'(verhindert, dass der Benutzer auf die Eingabe klickt)

  3. HTML: tabindex="-1"(Blockiert den Benutzer, um über die Tastatur zur Eingabe zu navigieren)


22

Sie werden nicht eingereicht, da dies in der W3C-Spezifikation angegeben ist .

17.13.2 Erfolgreiche Kontrollen

Eine erfolgreiche Kontrolle ist für die Einreichung "gültig". [snip]

  • Deaktivierte Steuerelemente können nicht erfolgreich sein.

Mit anderen Worten, die Spezifikation besagt, dass deaktivierte Steuerelemente als ungültig betrachtet werden und nicht eingereicht werden sollten.


2

DisabledKontrollen können nicht erfolgreich sein, und eine erfolgreiche Kontrolle ist für die Übermittlung "gültig". Dies ist der Grund, warum deaktivierte Steuerelemente nicht mit dem Formular gesendet werden.


1

Es gibt zwei Attribute, nämlich readonlyund disabled, die eine schreibgeschützte Eingabe vornehmen können. Aber es gibt einen winzigen Unterschied zwischen ihnen.

<input type="text" readonly />
<input type="text" disabled />
  • Das readonlyAttribut deaktiviert Ihren Eingabetext und Benutzer können ihn nicht mehr ändern.
  • Das disabledAttribut macht Ihren Eingabetext nicht nur deaktiviert (unveränderlich), sondern kann auch nicht gesendet werden .

jQuery-Ansatz (1):

$("#inputID").prop("readonly", true);
$("#inputID").prop("disabled", true);

jQuery-Ansatz (2):

$("#inputID").attr("readonly","readonly");
$("#inputID").attr("disabled", "disabled");

JavaScript-Ansatz:

document.getElementById("inputID").readOnly = true;
document.getElementById("inputID").disabled = true;

PS disabledund readonlysind Standard-HTML-Attribute. propeingeführt mit jQuery 1.6.


0

Ausgewählte Steuerelemente können auch bei schreibgeschütztem Attribut weiterhin angeklickt werden

Wenn Sie das Steuerelement weiterhin deaktivieren möchten, dessen Wert jedoch veröffentlicht werden soll. Sie können ein verstecktes Feld erstellen. mit dem gleichen Wert wie Ihre Kontrolle.

Erstellen Sie dann eine Abfrage, wenn Sie die Änderung auswählen

$('#your_select_id').change(function () {
    $('#your_hidden_selectid').val($('#your_select_id').val());
});
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.