Як відключити / увімкнути поле вибору за допомогою jQuery?


178

Я хотів би створити варіант у такій формі, як

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

де selectbox увімкнено лише тоді, коли прапорець встановлений, а деактивований, коли він не встановлений.

Я придумую цей код:

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

Я пробував різні методи , як встановити атрибут інвалідів з допомогою .prop(), .attr()і .disabled=. Однак нічого не відбувається. При застосуванні до <input type="checkbox">замість <select>цього код ідеально працює.

Як відключити / увімкнути <select>використання jQuery?


привіт, чи працює такий підхід на IE 10? не знаю, як увімкнути поле вибору в IE 10.
ROROROOROROR

Відповіді:


301

Ви хочете використовувати такий код:

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

Ось робочий приклад


33
$('#pizza_kind').prop('disabled', false);і $('#pizza_kind').prop('disabled', true);. Як говориться в документації jQuery : Властивості, як правило, впливають на динамічний стан елемента DOM, не змінюючи серіалізований атрибут HTML. Приклади включають властивість значень елементів вводу, вимкнено властивість входів та кнопок або встановлене прапорець у власному полі. Метод .prop () слід використовувати для встановлення вимкнених і перевірених замість методу .attr (). Для отримання та встановлення значення слід використовувати метод .val ().
naor

2
для jQuery 3 він повинен бути "$ ('# pizza_kind'). prop ('вимкнено', правда / хибність);" наскільки я знаю
Геннадій Г

3
Що таке $ (update_pizza); робити? Обгортання функції в об’єкт jquery?
Едвард

120

Щоб вимкнути / увімкнути вибір, перш за все, ваш вибір потребує ідентифікатора чи класу. Тоді ви могли б зробити щось подібне:

Вимкнути:

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

Увімкнути:

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

7
"Метод .prop () слід використовувати для встановлення вимкнених і перевірених замість методу .attr ()" Джерело: api.jquery.com/prop
Колін

2
це має бути обрана відповідь .. набагато краще для
скимінгу

Це не повинно бути відповіддю .removeAttr()більше не встановлює властивості в хибному jquery.com/upgrade-guide/3.0 / ... stackoverflow.com/a/13626565/125981
Марк Schultheiss

24

Виключено є булевої Атрибут від вибору елемента , як заявлено WHATWG , це означає , що правильний спосіб ВІДКЛЮЧИТИ з JQuery буде

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

Це зробило б цей 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>

Це працює як для XHTML, так і для HTML (посилання на W3School)

Але це також можна зробити, використовуючи його як властивість

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

отримання

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

Що працює лише для HTML, а не XTML

ПРИМІТКА . Відключений елемент не буде надіслано з формою, як відповіли в цьому запитанні: відключений елемент форми не подано

ПРИМІТКА2 . Відключений елемент може бути затьмареним.

ПРИМІТКА3:

Елемент керування формою, який вимкнено, повинен запобігати розсиланню по елементу будь-яких подій клацання, що входять до черги у джерелі завдання взаємодії з користувачем.

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>


8

Використовуйте наступне:

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

Або просто додати id="pizza_kind"до <select>тегу, наприклад <select name="pizza_kind" id="pizza_kind">: jsfiddle посилання

Причина, по якій ваш код не працював, полягає лише в тому, що $("#pizza_kind")він не вибирає <select>елемент, оскільки його немає id="pizza_kind".

Редагувати: насправді, кращим вибором є $("select[name='pizza_kind']"): посилання jsfiddle


5

У вас selectнемає ідентифікатора, лише ім’я. Вам потрібно буде змінити свій вибір:

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

Демо: http://jsbin.com/imokuj/2/edit


5

вибачте за відповідь у старому потоці, але, можливо, мій код допомагає іншим у майбутньому.

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

2

Хороше запитання - Я думаю, що єдиний спосіб досягти цього - це фільтрувати елементи у виділеному.
Це можна зробити через плагін jquery. Перевірте наступне посилання, там описано, як досягти чогось подібного до того, що вам потрібно. Завдяки
jQuery відключити параметри SELECT на основі вибраного радіо (потрібна підтримка для всіх браузерів)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.