JQuery kullanarak seçim alanı nasıl devre dışı bırakılır / etkinleştirilir?


178

Gibi bir formda bir seçenek oluşturmak istiyorum

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

Burada selectbox yalnızca onay kutusu işaretlendiğinde etkinleştirilir ve işaretlenmediğinde devre dışı bırakılır.

Bu kod ile geldim:

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

Ben nasıl kullanarak engelli özelliğini ayarlamak için çeşitli yöntemler denedi .prop(), .attr()ve .disabled=. Ancak, hiçbir şey olmuyor. <input type="checkbox">Bunun yerine uygulandığında <select>, kod mükemmel çalışır.

<select>JQuery kullanarak nasıl devre dışı bırakılır / etkinleştirilir ?


merhaba, bu yaklaşım IE 10 üzerinde çalışıyor mu? IE 10'da bir seçim alanını nasıl etkinleştireceğinizi bilmiyorum
ROROROOROROR

Yanıtlar:


301

Bunun gibi bir kod kullanmak istiyorsunuz:

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

İşte çalışan örnek


33
$('#pizza_kind').prop('disabled', false);ve $('#pizza_kind').prop('disabled', true);. As jQuery'nin belgelerine diyor : Özellikleri genellikle tefrika HTML niteliğini değiştirmeden bir DOM öğesinin dinamik durumunu etkiler. Örnekler, giriş öğelerinin value özelliğini, giriş ve düğmelerin devre dışı özelliğini veya bir onay kutusunun işaretli özelliğini içerir. Devre dışı bırakılmış ve .attr () yöntemi yerine denetlenmiş olarak ayarlamak için .prop () yöntemi kullanılmalıdır. Değeri almak ve ayarlamak için .val () yöntemi kullanılmalıdır.
naor

2
jQuery 3 için "$ ('# pizza_kind'). prop ('devre dışı', doğru / yanlış);" Bildiğim kadarıyla
Gennady G

3
$ (Update_pizza) nedir; yapıyor? İşlevi bir jquery nesnesinde mi sarmak istiyorsunuz?
Edward

120

Seçimleri devre dışı bırakabilmek / etkinleştirebilmek için öncelikle seçimlerinizin bir kimlik veya sınıfa ihtiyacı vardır. Sonra böyle bir şey yapabilirsiniz:

Devre Dışı:

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

Etkinleştirme:

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

7
".Attr () yöntemi yerine devre dışı bırakılmış ve işaretlenmiş ayarı yapmak için .prop () yöntemi kullanılmalıdır" kaynak: api.jquery.com/prop
Colin

2
bu seçilen cevap olmalı .. kaymağını almak için çok daha iyi :)
quemeful


24

Engelli bir olan Boole Özellik ait seçme elemanı belirttiği gibi WHATWG araçlarının, DOĞRU İÇİN DEVRE jQuery ile olacağını

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

Bu, bu HTML'yi

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

Bu hem XHTML hem de HTML (W3School başvurusu) için çalışır

Yine de mülk olarak kullanılarak da yapılabilir

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

alma

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

XTML için değil, yalnızca HTML için çalışır

NOT: Devre dışı bırakılan bir öğe, bu soruda yanıtlandığı şekilde formla birlikte gönderilmez: Devre dışı bırakılan form öğesi gönderilmez

NOT2: Devre dışı bırakılan bir öğe gri olabilir.

NOT3:

Devre dışı bırakılan bir form denetimi, kullanıcı etkileşimi görev kaynağında kuyruğa alınan tıklama olaylarının öğeye gönderilmesini engellemelidir.

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>

16

Sadece kullanın:

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

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

DEMO


8

Aşağıdakileri kullanın:

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

Ya da sadece eklemek id="pizza_kind"için <select>olduğu gibi, etiketin <select name="pizza_kind" id="pizza_kind">: jsfiddle linke

Kodunuzun çalışmamasının nedeni $("#pizza_kind"), <select>öğeyi seçmediği için öğeyi seçmemesidir id="pizza_kind".

Düzenleme: aslında, daha iyi bir seçici $("select[name='pizza_kind']"): jsfiddle link


5

Sizin selectbir kimliği, sadece adı yok. Seçicinizi değiştirmeniz gerekir:

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

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


5

eski iş parçacığında cevap için üzgünüm ama benim kod gelecekte diğer yardımcı olabilir. ben aynı senaryoda onay kutusu işaretlendiğinde o zaman seçilen birkaç giriş alanları diğer akıllıca devre dışı etkinleştirilecektir.

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.