2012-05-13 6 views
132

Ich möchte eine Option in einer Form, wieWie kann man das Auswahlfeld mit jQuery deaktivieren/aktivieren?

ist nur dann aktiviert
[] I would like to order a [selectbox with pizza] pizza 

wo selectbox erstellen, wenn Checkbox deaktiviert und aktiviert wird, wenn nicht überprüft.

Ich komme mit diesem Code auf:

<form> 
<input type="checkbox" id="pizza" name="pizza" value="yes"> <label for="pizza"> 
I would like to order a</label> 
<select name="pizza_kind"> 
    <option>(choose one)</option> 
    <option value="margaritha">Margaritha</option> 
    <option value="hawai">Hawai</option> 
</select> 
pizza. 
</form> 

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"> 
</script> 
<script> 
var update_pizza = function() { 
    if ($("#pizza").is(":checked")) { 
     $("#pizza_kind").removeAttr("disabled"); 
    } 
    else { 
     $("#pizza_kind").prop('disabled', 'disabled'); 
    } 
}; 

$(update_pizza); 
$("#pizza").change(update_pizza); 
</script> 

ich verschiedene Methoden, wie versucht disabled-Attribut gesetzt mit .prop(), .attr() und .disabled=. Es passiert jedoch nichts. Bei der Anwendung auf einen anstelle von <select> funktioniert der Code einwandfrei.

Wie zum Deaktivieren/Aktivieren <select> mit jQuery?

+0

hallo, tut dieser Ansatz auf 10 IE? Ich weiß nicht, wie ich ein Auswahlfeld in IE 10 aktivieren kann. – ROROROOROROR

Antwort

228

Sie möchten Code verwenden, wie folgt aus:

<form> 
    <input type="checkbox" id="pizza" name="pizza" value="yes"> 
    <label for="pizza">I would like to order a</label> 
    <select id="pizza_kind" name="pizza_kind"> 
    <option>(choose one)</option> 
    <option value="margaritha">Margaritha</option> 
    <option value="hawai">Hawai</option> 
    </select> 
    pizza. 
</form> 

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
<script> 
    var update_pizza = function() { 
    if ($("#pizza").is(":checked")) { 
     $('#pizza_kind').prop('disabled', false); 
    } 
    else { 
     $('#pizza_kind').prop('disabled', 'disabled'); 
    } 
    }; 
    $(update_pizza); 
    $("#pizza").change(update_pizza); 
</script> 

Hier example

+22

'$ ('# pizza_kind'). prop ('deaktiviert', false);' und '$ ('# pizza_kind'). prop ('deaktiviert', true);'. Wie [jQuerys Dokumentation] (http://api.jquery.com/prop/) sagt: _Properties beeinflussen im Allgemeinen den dynamischen Status eines DOM-Elements, ohne das serialisierte HTML-Attribut zu ändern. Beispiele sind die Eigenschaft value von Eingabeelementen, die Eigenschaft disabled von Eingängen und Schaltflächen oder die Eigenschaft checked eines Kontrollkästchens. Die Methode .prop() sollte anstelle der Methode .attr() verwendet werden, um disabled und checked zu setzen. Die Methode .val() sollte verwendet werden, um value._ – naor

+1

für jQuery 3 zu erhalten und zu setzen. Es sollte "$ ('# pizza_kind') sein. Prop ('disabled', true/false);" so weit ich weiß –

+2

Was ist $ (update_pizza); tun? Wrapping der Funktion in einem jquery-Objekt? – Edward

6

Verwenden Sie die folgenden Schritte aus:

$("select").attr("disabled", "disabled"); 

Oder fügen Sie einfach id="pizza_kind"-<select> Tag, wie <select name="pizza_kind" id="pizza_kind">: jsfiddle link

Der Grund Code funktionierte nicht einfach ist, weil $("#pizza_kind") nicht ist Wählen Sie das <select> Element, weil es id="pizza_kind" nicht hat.

Edit: tatsächlich, eine bessere Selektor ist $("select[name='pizza_kind']"): jsfiddle link

90

zu können wählt deaktivieren/aktivieren allererst Ihre wählt eine ID oder Klasse benötigen. Dann könnten Sie so etwas tun:

Disable:

$('#id').attr('disabled', 'disabled'); 

Enable:

$('#id').removeAttr('disabled'); 
+6

"Die Methode .prop() sollte verwendet werden, um" disabled "und" checked "anstelle der Methode .attr()" source: http://api.jquery.com zu setzen/prop/ – Colin

13

Einfach nur verwenden:

var update_pizza = function() { 
    $("#pizza_kind").prop("disabled", !$('#pizza').prop('checked')); 
}; 

update_pizza(); 
$("#pizza").change(update_pizza); 

DEMO

4

Ihre select arbeitet keine ID haben, nur ein Name.Sie müssen Ihre Wähler ändern:

$("#pizza").on("click", function(){ 
    $("select[name='pizza_kind']").prop("disabled", !this.checked); 
}); 

Demo: http://jsbin.com/imokuj/2/edit

2

leid in alten Thread zu beantworten, sondern kann mein Code andere in future.i hilft bei der gleichen Szenario war, dass, wenn das Kontrollkästchen aktiviert wird dann werden einige ausgewählte Eingabefelder deaktiviert.

$("[id*='chkAddressChange']").click(function() { 
    var checked = $(this).is(':checked'); 
    if (checked) { 
     $('.DisabledInputs').removeAttr('disabled'); 
    } else { 
     $('.DisabledInputs').attr('disabled', 'disabled'); 
    } 
}); 
12

Behinderte ist ein Boolean Attribute des select element wie WHATWG angegeben, das bedeutet, die RIGHT WAY mit jQuery zu DEAKTIVIEREN

jQuery("#selectId").attr('disabled',true); 

wäre Dies würde

<select id="selectId" name="gender" disabled="disabled"> 
    <option value="-1">--Select a Gender--</option> 
    <option value="0">Male</option> 
    <option value="1">Female</option> 
</select> 
diesem HTML machen

Dies funktioniert für beide XHTML and HTML (W3School reference)

Doch es kann auch

jQuery("#selectId").prop('disabled', 'disabled'); 

bekommt

<select id="selectId" name="gender" disabled> 

, mich als Eigentum gemacht werden, die für HTML funktioniert nur und nicht XTML

HINWEIS: Ein gesperrtes Element wird nicht mit dem Formular wie in dieser Frage beantwortet eingereicht: The disabled form element is not submitted

HINWEIS2: Ein deaktiviertes Element ist möglicherweise ausgegraut.

ANMERKUNG 3:

Eine Form, die Steuerung deaktiviert wird, muss jeder Klick Ereignisse verhindern, die auf die Benutzer-Interaktion Aufgabe Quelle Warteschlange von auf das Element geschickt wird.

TL; DR

<script> 
    var update_pizza = function() { 
     if ($("#pizza").is(":checked")) { 
      $('#pizza_kind').attr('disabled', false); 
     } else { 
      $('#pizza_kind').attr('disabled', true); 
     } 
    }; 
    $(update_pizza); 
    $("#pizza").change(update_pizza); 
</script> 
Verwandte Themen