Bagaimana cara menonaktifkan / mengaktifkan bidang pilih menggunakan jQuery?

178

Saya ingin membuat opsi dalam bentuk suka

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

di mana kotak pilih diaktifkan hanya ketika kotak centang dicentang dan dinonaktifkan ketika tidak dicentang.

Saya datang dengan kode ini:

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

Saya mencoba berbagai metode cara mengatur atribut cacat menggunakan .prop(), .attr()dan .disabled=. Namun, tidak ada yang terjadi. Saat melamar ke <input type="checkbox">alih - alih <select>, kode berfungsi dengan baik.

Bagaimana cara menonaktifkan / mengaktifkan <select>menggunakan jQuery?

izidor
sumber
halo, apakah pendekatan ini berfungsi pada IE 10? tidak tahu cara mengaktifkan bidang pilih di IE 10.
ROROROOROROR

Jawaban:

301

Anda ingin menggunakan kode seperti ini:

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

Berikut ini contoh kerjanya

Bisnis Berbasis Masyarakat
sumber
33
$('#pizza_kind').prop('disabled', false);dan $('#pizza_kind').prop('disabled', true);. Seperti yang dikatakan dokumentasi jQuery : Properti umumnya memengaruhi status dinamis elemen DOM tanpa mengubah atribut HTML serial. Contohnya termasuk properti nilai elemen input, properti input dan tombol yang dinonaktifkan, atau properti yang dicentang dari kotak centang. Metode .prop () harus digunakan untuk mengatur dinonaktifkan dan diperiksa, bukan metode .attr (). Metode .val () harus digunakan untuk mendapatkan dan menetapkan nilai.
naor
2
untuk jQuery 3 harus "$ ('# pizza_kind'). prop ('dinonaktifkan', benar / salah);" sejauh yang saya tahu
Gennady G
3
Apa itu $ (update_pizza); perbuatan? Membungkus fungsi dalam objek jquery?
Edward
120

Untuk dapat menonaktifkan / mengaktifkan pilihan pertama-tama pilihan Anda memerlukan ID atau kelas. Maka Anda dapat melakukan sesuatu seperti ini:

Nonaktifkan:

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

Memungkinkan:

$('#id').removeAttr('disabled');
Obsivus
sumber
7
"Metode .prop () harus digunakan untuk menetapkan dinonaktifkan dan diperiksa, bukan metode .attr ()" sumber: api.jquery.com/prop
Colin
2
ini harus menjadi jawaban yang dipilih .. jauh lebih baik untuk membaca sepintas :)
quemeful
ini BUKAN menjadi jawaban yang .removeAttr()tidak lagi menetapkan properti menjadi false jquery.com/upgrade-guide/3.0/… stackoverflow.com/a/13626565/125981
Mark Schultheiss
24

Dinonaktifkan adalah Atribut Boolean dari elemen pilih seperti yang dinyatakan oleh WHATWG , itu berarti CARA CARA UNTUK MENONAKTIFKAN dengan jQuery adalah

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

Ini akan membuat HTML ini

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

Ini berfungsi untuk XHTML dan HTML (referensi W3School)

Namun itu juga bisa dilakukan dengan menggunakannya sebagai properti

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

mendapatkan

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

Yang hanya berfungsi untuk HTML dan bukan XTML

CATATAN: Elemen yang dinonaktifkan tidak akan dikirimkan dengan formulir seperti yang dijawab dalam pertanyaan ini: Elemen formulir yang dinonaktifkan tidak dikirimkan

CATATAN2: Elemen yang dinonaktifkan dapat berwarna abu-abu.

CATATAN 3:

Kontrol formulir yang dinonaktifkan harus mencegah peristiwa klik yang antri pada sumber tugas interaksi pengguna agar tidak dikirim pada elemen.

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

Cukup gunakan:

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

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

DEMO

System Restart
sumber
8

Gunakan yang berikut ini:

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

Atau cukup tambahkan id="pizza_kind"ke <select>tag, seperti <select name="pizza_kind" id="pizza_kind">: tautan jsfiddle

Alasan kode Anda tidak berfungsi adalah karena $("#pizza_kind")tidak memilih <select>elemen karena tidak memiliki id="pizza_kind".

Sunting: sebenarnya, pemilih yang lebih baik adalah $("select[name='pizza_kind']"): tautan jsfiddle

KZ
sumber
5

Anda selecttidak memiliki ID, hanya nama. Anda harus memodifikasi pemilih Anda:

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

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

Sampson
sumber
5

maaf untuk menjawab di utas lama tetapi semoga kode saya membantu yang lain di masa depan. i berada dalam skenario yang sama bahwa ketika kotak centang akan dicentang maka beberapa bidang input yang dipilih akan memungkinkan orang bijak lainnya dinonaktifkan.

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