Включить отключенный атрибут с помощью 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
}
});
В действии: ссылка