Включить отключенный атрибут с помощью jQuery

Вот мой код:

$("#product1 :checkbox").click(function(){
    $(this)
        .closest('tr') // Find the parent row.
            .find(":input[type='text']") // Find text elements in that row.
                .attr('disabled',false).toggleClass('disabled') // Enable them.
                .end() // Go back to the row.
            .siblings() // Get its siblings
                .find(":input[type='text']") // Find text elements in those rows.
                .attr('disabled',true).removeClass('disabled'); // Disable them.
});

Как переключить .attr('disabled',false);?

Я не могу найти его в Google.

Ответы

Ответ 1

$('#el').prop('disabled', function(i, v) { return !v; });

Метод .prop() принимает два аргумента:

  • Свойство имя (отключено, отмечено, выбрано) все, что является истинным или ложным
  • Свойство Значение может быть:
    • (пустой) - возвращает текущее значение.
    • boolean (true/false) - устанавливает значение свойства. Функция
    • - выполняется для каждого найденного элемента, возвращаемое значение используется для установки свойства. Проходят два аргумента; первым аргументом является индекс (0, 1, 2, увеличивается для каждого найденного элемента). Второй аргумент - текущее значение элемента (true/false).

Итак, в этом случае я использовал функцию, которая предоставила мне индекс (i) и текущее значение (v), тогда я вернул противоположность текущего значения, поэтому состояние свойства изменилось на противоположное.

Ответ 2

Я предполагаю, что полная сопоставимость браузера disabled должна устанавливаться значением disabled или удаляться!
Вот небольшой плагин, который я только что сделал:

(function($) {
    $.fn.toggleDisabled = function() {
        return this.each(function() {
            var $this = $(this);
            if ($this.attr('disabled')) $this.removeAttr('disabled');
            else $this.attr('disabled', 'disabled');
        });
    };
})(jQuery);

Пример ссылки.

EDIT: обновлен пример ссылки/кода для поддержания цепочки! EDIT 2:
Основываясь на комментарии @lonesomeday, здесь расширенная версия:

(function($) {
    $.fn.toggleDisabled = function(){
        return this.each(function(){
            this.disabled = !this.disabled;
        });
    };
})(jQuery);

Ответ 3

    $('#checkbox').click(function(){
        $('#submit').attr('disabled', !$(this).attr('checked'));
    });

Ответ 4

Это довольно просто с синтаксисом обратного вызова attr:

$("#product1 :checkbox").click(function(){
  $(this)
   .closest('tr') // find the parent row
       .find(":input[type='text']") // find text elements in that row
           .attr('disabled',function(idx, oldAttr) {
               return !oldAttr; // invert disabled value
           })
           .toggleClass('disabled') // enable them
       .end() // go back to the row
       .siblings() // get its siblings
           .find(":input[type='text']") // find text elements in those rows
               .attr('disabled',function(idx, oldAttr) {
                   return !oldAttr; // invert disabled value
               })
               .removeClass('disabled'); // disable them
});

Ответ 5

Некоторое время спустя, и благодаря @arne, я создал эту подобную небольшую функцию для обработки, где вход должен быть отключен и скрыт или включен и показан:

function toggleInputState(el, on) {
  // 'on' = true(visible) or false(hidden)
  // If a field is to be shown, enable it; if hidden, disable it.
  // Disabling will prevent the field value from being submitted
  $(el).prop('disabled', !on).toggle(on);
}

Затем объект jQuery (такой как $('input [name= "something" ]')) просто переключается с помощью:

toggleInputState(myElement, myBoolean)

Ответ 6

Еще одна простая опция, которая обновляется по щелчку флажка.

HTML:

<input type="checkbox" id="checkbox/>
<input disabled type="submit" id="item"/>

JQuery

$('#checkbox').click(function() {
    if (this.checked) {
        $('#item').prop('disabled', false); // If checked enable item       
    } else {
        $('#item').prop('disabled', true); // If checked disable item                   
    }
});

В действии: ссылка