2017-02-27 3 views
-1

Ich benutze jQuery v1.4.4. Ich habe eine sehr einfache Form:jQuery .prop ('deaktiviert', true) ignoriert .val ('myval')

<select class="myselect" name="myselect"> 
<option value="-1" selected="selected">N/Av</option> 
<option value="-2">N/Ap</option> 
<option value="0">Available</option> 
</select> 

Was ich erreichen möchte den Wert auf 0 gesetzt (Available) und die Auswahl deaktivieren. So mache ich folgendes:

$('.myselect').val('0'); 
$('.myselect').prop('disabled', true); 

Der Ausgang ist richtig: Available wird ausgewählt und die Auswahl ist deaktiviert. Wenn ich das Formular abschicke, ist der Wert $_POST['myselect'] jedoch -1. Wenn ich nur verwenden ...

$('.myselect').val('0'); 

... der Wert von $_POST['myselect'] ist 0 wie erwartet.

Also meine Frage: Gibt es eine Möglichkeit, myselect zu deaktivieren und immer noch den Wert?

+1

Sie vermissen '' ', aber vielleicht ist das nicht das Problem. Vielleicht ist ein Tippfehler beim Schreiben der Frage? – Ionut

+1

Danke, dass Sie darauf hingewiesen haben, es war tatsächlich ein Tippfehler beim Schreiben der Frage. –

+0

Ok. Das Verhalten stimmt jedoch nicht mit dem überein, was Sie tun. Wenn das Element deaktiviert ist, wird sein Wert nicht in der Form POST gesendet. Sind Sie sicher, dass Sie nur ein Steuerelement mit diesem Namen haben? –

Antwort

2

Wenn ich das Formular jedoch vorlegen, ist der Wert von $_POST['myselect']-1.

...

Also meine Frage: Gibt es eine Möglichkeit MYSELECT zu deaktivieren und stellen nach wie vor den Wert?

Das ist, was der Code tun würde, aber:

Behinderten Felder aren't included in form submissions *, also, wenn Sie bekommen -1 von $_POST['myselect'], es kommt von woanders   — der Browser haben nichts geschickt für myselect überhaupt (es sei denn, Sie haben ein anderes name="myselect" Feld, das Sie nicht gezeigt haben).

Wenn das Feld im Formular enthalten sein soll, deaktivieren Sie es nicht. Leider unterstützen select Elemente readonly nicht. Daher müssen Sie entweder die anderen Optionen entfernen oder ein Skript verwenden, um zu verhindern, dass der Benutzer sie auswählt.

Siehe auchHimanshu Tyagi's answer Hinweis darauf, dass Sie einen API-Aufruf verwenden, der nicht in jQuery v1.4.4 enthalten ist.


* Relevante Zitat aus dem spec:

  1. Lassen Sie steuert eine Liste aller submittable Elemente sein, deren Form Eigentümer ist Form, in Baum um.

  2. Lassen Sie den Formulardatensatz eine Liste von Name-Wert-Typ Tupel, zunächst leer.

  3. Loop: Für jedes Element Feld in der Kontrollgruppe, in Baum Reihenfolge ausführen, um die folgenden Teilschritte:

    Wenn eine der folgenden Bedingungen erfüllt sind, dann überspringen diese Unterschritte für dieses Element:

    • Das Feldelement verfügt über einen Vorfahren des Datenelementelements.
    • Das Feldelement ist deaktiviert.
    • ...

(Hervorhebung von mir)

+1

Vielen Dank für den Hinweis, dass deaktivierte Felder nicht in Formulareinreichungen enthalten sind. Da das select-Tag "readonly" nicht unterstützt, habe ich meine Antwort in diesem Q gefunden: [HTML form readonly SELECT tag/input] (http://stackoverflow.com/questions/368813/html-form-readonly-select- Tag-Eingabe). –

1

http://api.jquery.com/prop/

.prop seit 1.6 hinzugefügt wird und Sie verwenden 1.4 finden Sie im Fehlerprotokoll in der Code

$('.myselect').val('0'); 
 
$('.myselect').prop('disabled', true);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script> 
 
<select class="myselect" name="myselect"> 
 
<option value="-1" selected="selected">N/Av</option> 
 
<option value="-2">N/Ap</option> 
 
<option value="0">Available</option> 
 
</select>

Wenn Sie mit halten jQuery 1.4.4, müssen Sie attr statt prop verwenden:

$('.myselect').val('0'); 
 
$('.myselect').attr('disabled', "disabled");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script> 
 
<select class="myselect" name="myselect"> 
 
<option value="-1" selected="selected">N/Av</option> 
 
<option value="-2">N/Ap</option> 
 
<option value="0">Available</option> 
 
</select>

Attribute vs. Eigenschaften

Der Unterschied zwischen Attributen und Eigenschaften kann in spezifischen Situationen wichtig sein. Vor jQuery 1.6 berücksichtigte die Methode .attr() manchmal Eigenschaftswerte beim Abrufen einiger Attribute, , die zu inkonsistentem Verhalten führen konnten. Ab jQuery 1.6 bietet die Methode .prop() eine Möglichkeit zum expliziten Abrufen von Eigenschaftswerten, während .attr() Attribute abruft.

Verwandte Themen