web-dev-qa-db-de.com

Deaktivierte Formulareingaben werden in der Anforderung nicht angezeigt

Ich habe einige deaktivierte Eingaben in einem Formular und möchte sie an einen Server senden, aber Chrome schließt sie von der Anforderung aus. 

Gibt es eine Problemumgehung, ohne ein verstecktes Feld hinzuzufügen? 

<form action="/Media/Add">
    <input type="hidden" name="Id" value="123" />

    <!-- this does not appear in request -->
    <input type="textbox" name="Percentage" value="100" disabled="disabled" /> 

</form>
276
hazzik

Elemente mit dem Attribut "Deaktiviert" werden nicht übermittelt, oder Sie können sagen, dass ihre Werte nicht gebucht werden (siehe den zweiten Punkt unter Schritt 3 in der Spezifikation zum Erstellen des Formulardatensatzes ).

Das heißt,

<input type="textbox" name="Percentage" value="100" disabled="disabled" /> 

Zu Ihrer Information,

  1. Deaktivierte Steuerelemente erhalten keinen Fokus.
  2. Deaktivierte Steuerelemente werden in der Tab-Navigation übersprungen.
  3. Deaktivierte Steuerelemente können nicht erfolgreich gebucht werden.

Sie können das Attribut readonly in Ihrem Fall verwenden. Auf diese Weise können Sie die Daten Ihres Felds buchen.

Das heißt,

<input type="textbox" name="Percentage" value="100" readonly="readonly" />

Zu Ihrer Information,

  1. Schreibgeschützte Elemente erhalten den Fokus, können jedoch vom Benutzer nicht geändert werden.
  2. Schreibgeschützte Elemente sind in der Tab-Navigation enthalten.
  3. Schreibgeschützte Elemente wurden erfolgreich gebucht.
623
AlphaMale

Mit Jquery und dem Senden der Daten mit Ajax können Sie Ihr Problem lösen: 

<script>

$('#form_id').submit(function() {
    $("#input_disabled_id").prop('disabled', false);

    //Rest of code
    })
</script>
22
LipeTuga

Um Werte aus deaktivierten Eingaben zusätzlich zu den aktivierten Eingaben zu buchen, können Sie einfach alle Eingaben des Formulars während der Übermittlung erneut aktivieren.

<form onsubmit="this.querySelectorAll('input').forEach(i => i.disabled = false)">
    <!-- Re-enable all input elements on submit so they are all posted, 
         even if currently disabled. -->

    <!-- form content with input elements -->
</form>

Wenn Sie jQuery bevorzugen:

<form onsubmit="$(this).find('input').prop('disabled', false)">
    <!-- Re-enable all input elements on submit so they are all posted, 
         even if currently disabled. -->

    <!-- form content with input elements -->
</form>

Für ASP.NET MVC C # Razor fügen Sie den Übergabehandler folgendermaßen hinzu:

using (Html.BeginForm("ActionName", "ControllerName", FormMethod.Post,
    // Re-enable all input elements on submit so they are all posted, even if currently disabled.
    new { onsubmit = "this.querySelectorAll('input').forEach(i => i.disabled = false)" } ))
{
    <!-- form content with input elements -->
}
6
Tom Blodget

Wenn Sie das Feld unbedingt deaktivieren und die Daten übergeben müssen, können Sie ein Javascript verwenden, um dieselben Daten in ein ausgeblendetes Feld einzugeben (oder auch nur das ausgeblendete Feld festzulegen). Dies würde es Ihnen ermöglichen, es zu deaktivieren, aber trotzdem die Daten zu veröffentlichen, obwohl Sie auf einer anderen Seite posten würden.

6
Chris Pierce

Ich aktualisiere diese Antwort, da sie sehr nützlich ist. Fügen Sie einfach readonly zur Eingabe hinzu.

Das Formular wird also sein:

<form action="/Media/Add">
    <input type="hidden" name="Id" value="123" />
    <input type="textbox" name="Percentage" value="100" readonly/>
</form>
2
Limon

Ich finde das funktioniert einfacher. readonly das Eingabefeld und formatieren Sie es so, dass der Endbenutzer weiß, dass es nur gelesen werden kann. Hier platzierte Eingaben (z. B. von AJAX) können auch ohne zusätzlichen Code übergeben werden.

<input readonly style="color: Grey; opacity: 1; ">
1
Erik Robinson

Semantisch fühlt sich das an wie das richtige Verhalten

Ich würde mich fragen " Warum muss ich diesen Wert übergeben? "

Wenn Sie eine deaktivierte Eingabe in einem Formular haben, möchten Sie vermutlich nicht, dass der Benutzer den Wert direkt ändert

Jeder Wert, der in einer deaktivierten Eingabe angezeigt wird, sollte entweder sein

  1. ausgabe von einem Wert auf dem Server, der das Formular erstellt hat, oder
  2. wenn das Formular dynamisch ist, lassen Sie sich aus den anderen Eingaben des Formulars berechnen

Unter der Annahme, dass der Server, der das Formular verarbeitet, mit dem Server identisch ist, der das Formular bereitstellt, sollten alle Informationen zur Wiedergabe der Werte der deaktivierten Eingaben bei der Verarbeitung verfügbar sein

In der Tat um die Datenintegrität zu bewahren - selbst wenn der Wert der deaktivierten Eingabe an den Verarbeitungsserver gesendet wurde, sollten Sie sie wirklich überprüfen.Diese Validierung würde die gleiche Information erfordern, wie Sie es ohnehin tun würden, um die Werte zu reproduzieren!

Ich würde fast behaupten, dass in der Anfrage keine schreibgeschützten Eingaben gesendet werden sollten 

Gerne korrigiert zu werden, aber alle Anwendungsfälle Ich kann mir vorstellen, wo schreibgeschützte/deaktivierte Eingaben eingereicht werden müssen sind eigentlich nur verkleidete Themen

1
Arth