我在获取单击所有搜索匹配复选框的功能时遇到问题。myFunc()
click 事件似乎触发了,但没有检查或调用复选框。
手动单击每个复选框时效果很好,但是谁想用 40 多个复选框来做到这一点 - 而不是我的用户。
您可能想知道为什么我使用 div-onclick 而不是直接在输入复选框上。那是因为我想给我的用户一个比一个小复选框更大的点击区域。
我想为我的用户提供一个超链接来选择与某些属性值匹配的多个复选框。
HTML
<div id="container">
<a href="#" onclick="clickAndCheckAllMatch('search for this text');return false;">some text</a>
<div id="*actual_ID*" onclick="myFunc(a, b, c, d);">
<input type="checkbox" id="book-*actual_ID*" onclick="this.parentNode.click;return false;">
</div>
</div>
JS
function myFunc(a, b, c, d) {
// does stuff
}
function clickAndCheckAllMatch(value) {
$('div[onclick*='+value+']').each(function(idx,e){
$('book-'+this.id).click();
}
编辑
当我从div更改为label时,我不必更正复选框状态。一个div或块元素在那里一定有一些问题。
我还从div中删除了 onclick ,这意味着我能够直接定位复选框,并且可以将它们的 ID 值更改为实际_ID。
function clickAndCheckAllMatch(value) {
$('input[onclick*='+value+']').each(function(idx,e){
// e == this
$(this)[0].click();
if ($(this).attr('disabled')) {
//do nothing
} else {
if ($(this).attr('checked')) {
//do nothing
} else {
$(this)[0].click(); // only one checkbox per ID
}
}
});
}
function CheckAll() {
$('#container input[type=checkbox]:not(:checked)').each(function(idx,e){
$(this).click(); // notice the difference ?
});
}