JQuery Выберите поля ввода, кроме скрытых
У меня есть строка в таблице, которая содержит флажок и некоторые другие поля формы (текстовые поля, скрытые поля, списки выбора). Когда флажок установлен, я хочу отключить все поля формы в этой строке, кроме скрытых полей. У меня это работает по большей части, но я не могу игнорировать скрытые поля.
Каков наилучший способ выбрать все поля формы в строке таблицы, но игнорировать скрытые поля в выборе?
Ответы
Ответ 1
Предполагая, что "скрытый" означает 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");
}
});
Ответ 2
$(":input:not([type=hidden])")
": input" - псевдо-селектор jQuery... "Выбирает все элементы ввода, textarea, select и button."
http://api.jquery.com/input-selector/
Ответ 3
Вы также можете решить эту проблему с помощью скрытого селектора
$("input:not(:hidden)")
Смотрите также: скрытый селектор jQuery
Ответ 4
.........
$('tr input').attr('disabled', true)
$('tr input[type="hidden"]').removeAttr('disabled')
Ответ 5
Во-первых, вам нужно пометить флажок "селектор" (например, с помощью селектора атрибутов класса), чтобы было ясно, что он используется для проверки вместо обычного элемента формы. Затем вы используете это:
$('table :checkbox.selector').click(function(ev) {
$(ev.currentTarget)
.parents('td').siblings('td')
.find(':input:not([type=hidden])')
.attr('disabled', ev.currentTarget.checked);
});
Это решение работает для всех входов (например, списки выбора, текстовые поля), и оно не отключает флажок селектора.
Я предполагаю, что вы используете последний jQuery.
Ответ 6
Я нашел простой способ сделать это в jquery.
$("tr input").not("input[type='hidden']")
В нижеприведенном фрагменте кода есть div с идентификатором tabsDiv
, который содержит несколько элементов html, и этот код получает все входные элементы внутри этого div, кроме тех, которые имеют тип hidden
.
$("#tabsDiv").find("input").not("input[type='hidden']")
Ответ 7
Просто добавьте фильтр видимого, что означает, что он будет принимать только элемент ввода, который будет видимым для пользователей.
Это сработало для меня. Я добавляю описание для 30 char.
$( "вход: видимый" )