在jQuery中获取最接近元素的表单

jco*_*ams 11 html javascript checkbox jquery

我有这个js/jquery脚本,我写了一个表格检查所有checboxes.它运行良好,但这会检查页面上的所有复选框,而不管它们是什么样的表单包装器.

这是功能

function toggleCheck(state)
{   var checkboxes = jQuery("form input:checkbox");
if(state==true){checkboxes.prop('checked',true); }
if(state==false){ checkboxes.prop('checked',false); }
}
Run Code Online (Sandbox Code Playgroud)

用法

<a id="check" href="#" onclick="javascript:toggleCheck(true);" class="btn">Select All</a>
<a id="uncheck" href="#" onclick="javascript:toggleCheck(false);" class="btn">Deselect All</a>
Run Code Online (Sandbox Code Playgroud)

请注意这很好,但我的问题是,如果我有

 <form action="myaction-page">//some form elements and checkboxes </form>
Run Code Online (Sandbox Code Playgroud)

<form action="myaction-page-2">//some form elements and checkboxes </form>
Run Code Online (Sandbox Code Playgroud)

然后我点击form1中的check all链接,所有复选框都会被检查,包括form2中的那些.

有没有办法在不引入表单ID或名称的情况下将它们分开?这是因为我在生产代码中广泛使用它并重写所有都会有麻烦.

任何帮助将不胜感激.

PS值得注意的是,select all和deselect all都在两种形式中,两种形式都在同一页面上.

j08*_*691 15

假设您的选择/取消选择链接在表单内,请执行以下操作:

function toggleCheck(state,elem) {
    jQuery(elem).closest("form").find("input:checkbox").prop('checked', state);
}
Run Code Online (Sandbox Code Playgroud)

并将您的链接JS更改为(传递适当的true/false参数):

onclick="javascript:toggleCheck(false,this);"
Run Code Online (Sandbox Code Playgroud)

jsFiddle例子

  • @VyrenMedia有编辑器可以让你轻松地用y替换x,例如notepad ++.您可以使用regexp标志在一次扫描中用`toggleCheck($ 1,this)`替换`toggleCheck \((true | false)+ \)`的所有出现,并立即替换特定目录下的文件.它甚至可以让您过滤到只匹配特定模式的文件. (2认同)