JavaScript排队单击事件
我有一个长长的复选框列表,如下所示:JavaScript排队单击事件,javascript,jquery,Javascript,Jquery,我有一个长长的复选框列表,如下所示: <input class='masterCheckbox' type='checkbox' onclick='clickAll()' /> <input class='modifyDb' type='checkbox' onclick='ajaxCall(someId)' /> <input class='modifyDb' type='checkbox' onclick='ajaxCall(someId)' check
<input class='masterCheckbox' type='checkbox' onclick='clickAll()' />
<input class='modifyDb' type='checkbox' onclick='ajaxCall(someId)' />
<input class='modifyDb' type='checkbox' onclick='ajaxCall(someId)' checked />
<input class='modifyDb' type='checkbox' onclick='ajaxCall(someId)' checked />
... lets say there's exactly 100 ...
<input class='modifyDb' type='checkbox' onclick='ajaxCall(someId)' />
<input class='modifyDb' type='checkbox' onclick='ajaxCall(someId)' />
<input class='modifyDb' type='checkbox' onclick='ajaxCall(someId)' checked />
... 假设正好有100个。。。
ajaxCall()
函数对PHP页面进行ajax调用(使用jQuery)以在数据库中进行一些更改
我希望选中masterCheckbox
复选框时,检查所有未选中的复选框并单击它们,以便它们各自进行单独的ajax调用
使用jQuery,我成功地获得了所有的modifyDb
复选框,然后使用。each()
函数调用。在每个元素上单击()。这在视觉上起作用;复选框是切换的,但是没有进行ajax调用
这是因为ajax调用太快了吗?我可以以某种方式将函数调用排队吗?使用trigger
以下代码重新单击所有的onclick
。modifyDb
function clickAll() {
$('.modifyDb').trigger('click');
}
参考文献
这将在尚未选中的框上触发单击事件
function clickAllUnchecked(){
$('.modyfDb').not(':checked').trigger('click')
}
我会重新排序,去掉所有的内联事件处理程序。大概是这样的:
<input class='masterCheckbox' type='checkbox' />
<input class='modifyDb' type='checkbox' data-id='someId)' />
<!-- .... -->
对于主复选框:
$(".masterCheckbox").click(function() {
$(".modifyDb").each(function() {
var id = $(this).data("id");
ajaxCall(id);
// or if you really must, you could use trigger() here
})
});
啊,我完全忘了触发器这真的有用吗?根据.click()
只是.trigger('click')
的一个快捷方式,所以两者都应该可以工作。OP已经在使用$.fn.click
,它只会路由到$.fn.trigger
,仅供参考:那么你是说我onclick=''不会触发?@EliteOctagon:实际上我刚刚检查过,而且它似乎在触发onclick
时工作正常。所以我不确定为什么.click()
对您不起作用。这有助于解决类似not()修饰符的问题,非常注重细节
$(".masterCheckbox").click(function() {
$(".modifyDb").each(function() {
var id = $(this).data("id");
ajaxCall(id);
// or if you really must, you could use trigger() here
})
});