Подтвердить что ты не робот

JQuery Выберите поля ввода, кроме скрытых

У меня есть строка в таблице, которая содержит флажок и некоторые другие поля формы (текстовые поля, скрытые поля, списки выбора). Когда флажок установлен, я хочу отключить все поля формы в этой строке, кроме скрытых полей. У меня это работает по большей части, но я не могу игнорировать скрытые поля.

Каков наилучший способ выбрать все поля формы в строке таблицы, но игнорировать скрытые поля в выборе?

4b9b3361

Ответ 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.

$( "вход: видимый" )