Jak wyłączyć / włączyć pole wyboru za pomocą jQuery?

178

Chciałbym stworzyć opcję w postaci np

[] I would like to order a [selectbox with pizza] pizza

gdzie pole wyboru jest włączone tylko wtedy, gdy pole wyboru jest zaznaczone i wyłączone, gdy nie jest zaznaczone.

Wymyślam ten kod:

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

Próbowałem różnych metod, jak ustawić atrybut disabled użyciu .prop(), .attr()oraz .disabled=. Jednak nic się nie dzieje. W przypadku zastosowania <input type="checkbox">zamiast <select>a kod działa doskonale.

Jak wyłączyć / włączyć <select>za pomocą jQuery?

izidor
źródło
cześć, czy to podejście działa w przeglądarce IE 10? nie wiem, jak włączyć pole wyboru w IE 10.
ROROROOROROR

Odpowiedzi:

301

Chciałbyś użyć takiego kodu:

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

Oto działający przykład

Biznes oparty na społeczności
źródło
33
$('#pizza_kind').prop('disabled', false);i $('#pizza_kind').prop('disabled', true);. Jak mówi dokumentacja jQuery : Właściwości ogólnie wpływają na dynamiczny stan elementu DOM bez zmiany zserializowanego atrybutu HTML. Przykłady obejmują właściwość value elementów wejściowych, wyłączoną właściwość wejść i przycisków lub zaznaczoną właściwość pola wyboru. Metoda .prop () powinna być używana do wyłączania i sprawdzania zamiast metody .attr (). Do pobierania i ustawiania wartości należy używać metody .val ().
dotyczy
2
dla jQuery 3 powinno to być "$ ('# pizza_kind'). prop ('disabled', true / false);" o ile wiem
Giennadij G
3
Co to jest $ (update_pizza); robić? Zawijanie funkcji w obiekcie jquery?
Edward
120

Aby móc wyłączać / włączać zaznaczenia, najpierw musisz mieć identyfikator lub klasę. Wtedy możesz zrobić coś takiego:

Wyłączyć:

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

Włączyć:

$('#id').removeAttr('disabled');
Obsivus
źródło
7
„Do wyłączania i zaznaczania metody .attr () należy użyć metody .prop ()” źródło: api.jquery.com/prop
Colin
2
to powinna być wybrana odpowiedź… dużo lepsza do przeglądania :)
quemeful
NIE powinno to być odpowiedzią .removeAttr()nie ustawia już właściwości na false jquery.com/upgrade-guide/3.0/... stackoverflow.com/a/13626565/125981
Mark Schultheiss
24

Wyłączone jest to logiczny atrybut z elementu select jak stwierdził WHATWG , oznacza to, że właściwy sposób, aby wyłączyć z jQuery byłoby

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

To spowodowałoby, że ten HTML

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

Działa to zarówno dla XHTML, jak i HTML (dokumentacja W3School)

Jednak można to również zrobić, używając go jako własności

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

uzyskiwanie

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

Który działa tylko w przypadku HTML, a nie XTML

UWAGA: Wyłączony element nie zostanie przesłany z formularzem, zgodnie z odpowiedzią na to pytanie: Wyłączony element formularza nie został przesłany

UWAGA 2: Wyłączony element może być wyszarzony.

UWAGA 3:

Formant formularza, który jest wyłączony, musi zapobiegać wysyłaniu do elementu zdarzeń kliknięcia, które są umieszczone w kolejce w źródle zadań interakcji z użytkownikiem.

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>
Azteca
źródło
16

Po prostu użyj:

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

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

DEMO

Ponowne uruchomienie systemu
źródło
8

Użyj następujących:

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

Lub po prostu dodaj id="pizza_kind"do <select>tagu, na przykład <select name="pizza_kind" id="pizza_kind">: jsfiddle link

Twój kod nie zadziałał, ponieważ $("#pizza_kind")nie wybrał <select>elementu, ponieważ go nie ma id="pizza_kind".

Edycja: właściwie lepszym selektorem jest $("select[name='pizza_kind']"): link jsfiddle

KZ
źródło
5

Twój selectnie ma identyfikatora, tylko imię. Musisz zmodyfikować swój selektor:

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

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

Sampson
źródło
5

przepraszam, że odpowiadam w starym wątku, ale może mój kod pomoże innym w przyszłości. i był w tym samym scenariuszu, że gdy pole wyboru zostanie zaznaczone, to kilka wybranych pól wejściowych zostanie włączonych inne mądre wyłączone.

$("[id*='chkAddressChange']").click(function () {
    var checked = $(this).is(':checked');
    if (checked) {
        $('.DisabledInputs').removeAttr('disabled');
    } else {
        $('.DisabledInputs').attr('disabled', 'disabled');
    }
});
Mou
źródło