JQueryselectinput字段,除了隐藏

我在表格中有一行,其中包含一个checkbox和一些其他表单域(文本框,隐藏域,select列表)。 当checkbox被选中时,我想要禁用该行中除隐藏字段以外的所有表单字段。 我有这个工作的大部分,但我似乎无法忽视隐藏的领域。

什么是最好的方式来select表格中的所有表单字段,但忽略select中的隐藏字段?

假设“隐藏”,你的意思是type="hidden"即:

 <input type="hidden" name="foo" value="bar"> 

那么你可以使用属性不等于select器来做到这一点:

 $("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"); } }); 

我的一般build议是避免属性select器。 他们很慢。 给相关input(隐藏的或不隐藏的)一个类,然后在select器中使用。

如果您的意思是“隐藏”,如“不可见”那么使用:visibleselect器:

 $("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"); } }); 
 $(":input:not([type=hidden])") 

“:input”是一个jQuery伪select器…“select所有的input,textarea,select和button元素。 http://api.jquery.com/input-selector/

你也可以使用隐藏的select器来解决这个问题

$("input:not(:hidden)")

另请参见: jQuery隐藏select器

………

 $('tr input').attr('disabled', true) $('tr input[type="hidden"]').removeAttr('disabled') 

首先,你需要给你的“select器”checkbox添加标签(例如,使用一个类属性“select器”),以便清楚地看到它用于检查而不是常规的表单元素。

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

这种解决scheme适用于所有的input(例如,select列表,textareas),它不会禁用select器checkbox本身。

我假设你使用最新的jQuery。

我在jQuery中find了一个简单的方法。

 $("tr input").not("input[type='hidden']") 

在下面的代码片段中,有一个div的id为tabsDiv ,它包含多个html元素,并且这个代码除了那些hiddentypes之外,还获得了这个div中的所有input元素。

 $("#tabsDiv").find("input").not("input[type='hidden']")