Я ссорюсь в таблице, которая содержит флажок и некоторые другие поля формы (текстовые поля, скрытые поля, списки выборки). Когда флажок проверяется, я хочу отключить все поля формы в той строке за исключением скрытых полей. У меня есть эта работа по большей части, но я, может казаться, не игнорирую скрытые поля.
Что лучший способ состоит в том, чтобы выбрать все поля формы в строке таблицы, но проигнорировать скрытые поля в выборе?
.........
$('tr input').attr('disabled', true)
$('tr input[type="hidden"]').removeAttr('disabled')
Во-первых, вам нужно пометить свой флажок "селектор" (например, с помощью класса атрибут "селектор), чтобы было ясно, что он используется для проверки вместо обычного элемента формы. Затем вы используете это:
$('table :checkbox.selector').click(function(ev) {
$(ev.currentTarget)
.parents('td').siblings('td')
.find(':input:not([type=hidden])')
.attr('disabled', ev.currentTarget.checked);
});
Это решение работает для всех входов (например, списки выбора, текстовые поля) и не отключает сам селектор.
Я предполагаю, что вы используете последнюю версию jQuery.
Под "скрытым" подразумевается type = "hidden"
то есть:
<input type="hidden" name="foo" value="bar">
тогда вы можете использовать атрибут Не равно селектору для этого:
$("tr input:checkbox").click(function() {
var cb = $(this);
var tr = $(this).closest("tr");
if (cb.val()) {
tr.find("input[type!='hidden']").attr("disabled", true);
} else {
tr.find("input[type!='hidden']").removeAttr("disabled");
}
});
Мой общий совет - избегать использования селекторов атрибутов. Они медленные. Дайте соответствующим входам (скрытым или не скрытым) класс, а затем используйте его в селекторах.
Однако, если вы имеете в виду «скрытый» как «невидимый», используйте селектор : visible
:
$("tr input:checkbox").click(function() {
var cb = $(this);
var tr = $(this).closest("tr");
if (cb.val()) {
tr.find("input:visible").attr("disabled", true);
} else {
tr.find("input:visible").removeAttr("disabled");
}
});