我在表格中有一行,其中包含一个复选框和一些其他表单字段(文本框,隐藏字段,选择列表)。选中该复选框后,我想禁用该行中除隐藏字段外的所有表单字段。我大部分时间都在工作,但我似乎无法忽视隐藏的领域。
选择表格行中的所有表单字段但忽略选择中的隐藏字段的最佳方法是什么?
答案 0 :(得分:45)
$(":input:not([type=hidden])")
":输入"是一个jQuery伪选择器..."选择所有输入,textarea,select和按钮元素。" http://api.jquery.com/input-selector/
答案 1 :(得分:43)
假设“隐藏”是指type="hidden"
即:
<input type="hidden" name="foo" value="bar">
然后您可以使用attribute not equals selector执行此操作:
$("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 :(得分:21)
答案 3 :(得分:4)
我在jquery中找到了一种简单的方法。
$("tr input").not("input[type='hidden']")
在下面的代码段中,有一个id为tabsDiv
的div,其中包含多个html元素,此代码获取此div中的所有输入元素,但类型为hidden
的除外。
$("#tabsDiv").find("input").not("input[type='hidden']")
答案 4 :(得分:1)
.........
$('tr input').attr('disabled', true)
$('tr input[type="hidden"]').removeAttr('disabled')
答案 5 :(得分:0)
首先,你需要标记你的“选择器”复选框(例如使用类属性“选择器”,这样很明显它用于检查而不是常规表单元素。然后你使用它:
$('table :checkbox.selector').click(function(ev) {
$(ev.currentTarget)
.parents('td').siblings('td')
.find(':input:not([type=hidden])')
.attr('disabled', ev.currentTarget.checked);
});
此解决方案适用于所有输入(例如,选择列表,textareas),并且它不会禁用选择器复选框本身。
我假设你使用最新的jQuery。
答案 6 :(得分:0)
只需添加一个可见的过滤器,这意味着它只需要用户可见的输入元素 这对我有用,我正在添加30个字符的描述。
$(&#34;输入:可见&#34)
答案 7 :(得分:0)
你可以使用这个,它对我来说很好用:
var $inputs = $('#formArticle :input:not(:hidden)');
formArticle
是我的表单名称。