Werte von deaktivierten Eingaben werden nicht übermittelt

224

Das habe ich von Firebug in Firefox gefunden.

Ist es in anderen Browsern dasselbe?

Wenn ja, was ist der Grund dafür?

Oh mein Gott
quelle
23
Sie können ein 'readonly'-Attribut festlegen. Chrome rendert es beispielsweise als deaktiviertes Feld, sendet es jedoch weiter.
Peterrus
6
Mögliches Duplikat von Eingaben für
deaktivierte

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.

Aziz
quelle
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

Fred K.
quelle
@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)

Novice_JS
quelle
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.

MiffTheFox
quelle
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.

Juan de Parras
quelle
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.

Elyas Hadizadeh
quelle
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());
});
Johnine
quelle