Поля ввода выбора jQuery кроме скрытого

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

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

53
задан Bob 7 March 2010 в 05:52
поделиться

3 ответа

.........

$('tr input').attr('disabled', true)
$('tr input[type="hidden"]').removeAttr('disabled')
1
ответ дан 7 November 2019 в 08:30
поделиться

Во-первых, вам нужно пометить свой флажок "селектор" (например, с помощью класса атрибут "селектор), чтобы было ясно, что он используется для проверки вместо обычного элемента формы. Затем вы используете это:

$('table :checkbox.selector').click(function(ev) {
    $(ev.currentTarget)
            .parents('td').siblings('td')
            .find(':input:not([type=hidden])')
            .attr('disabled', ev.currentTarget.checked);
});

Это решение работает для всех входов (например, списки выбора, текстовые поля) и не отключает сам селектор.

Я предполагаю, что вы используете последнюю версию jQuery.

0
ответ дан 7 November 2019 в 08:30
поделиться

Под "скрытым" подразумевается 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");
  }
});
43
ответ дан 7 November 2019 в 08:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: