【发布时间】:2015-05-09 11:21:29
【问题描述】:
我目前正在开发一家摄影商店网站。客户将被允许在一个页面上查看 100-500 张图像的照片集。我希望这些客户能够单击“全选”按钮(或其他元素)来检查页面上的所有复选框。在 Stack Overflow 上研究后,我目前正在使用 jQuery 成功完成这个“全选”功能。
目前,我正在使用的代码在照片集中的每个图像上都放置了一个复选框。如果用户单击复选框,则会触发自定义事件。但是,我希望复选框状态被选中(或从未选中变为选中)来触发事件,而不是点击。如果单击触发事件,我使用 jQuery 的全选功能将无法工作,因为 jQuery 没有“单击”页面上的每个复选框,只是将复选框更改为选中状态。这意味着自定义事件不会加载。
当前通过单击(我不想这样做)触发我需要的事件的代码是:
$('.select-product').on('click', this.QuickOrder.loadProduct);
我正在尝试开发的代码不起作用,但它类似于:
$('.select-product').change(function(){
var isChecked = $(this).is(':checked');
if(isChecked) {
this.QuickOrder.loadProduct;
}
});
我用.change()函数研究后发现change函数注册了checkbox条件的变化。当此条件变为真时,我希望QuickOrder.loadProduct 触发。之后,一切都应该正常了。
这是我的 jQuery“全选”脚本供参考:
$(document).ready(function() {
$("#select_all").change(function(){
if(this.checked){
$(".select-product").each(function(){
this.checked=true;
})
}else{
$(".select-product").each(function(){
this.checked=false;
})
}
});
$(".select-product").click(function () {
if (!$(this).is(":checked")){
$("#select_all").prop("checked", false);
}else{
var flag = 0;
$(".select-product").each(function(){
if(!this.checked)
flag=1;
})
if(flag == 0){ $("#select_all").prop("checked", true);}
}
});
});
关于如何实现这一点的任何想法?谢谢!
【问题讨论】:
-
你试过
$(this).prop('checked')或$(this).attr('checked')吗?它们实际上都是相同的东西,但来自不同的 jQuery 时代 -
这两个我都用过,但都没用。
-
复选框只有两种状态:未选中和选中。状态仅由单击事件更改。我不确定您需要什么来注册更改事件?
-
无论出于何种原因,上面 jQuery 中的单击事件都不是“单击”照片。我认为您说我不需要“更改”事件是正确的,因为在一天结束时,我使用了单击事件。下面的@bgoldst 向我展示了 trigger('click') 函数所缺少的内容,而不仅仅是单击。他做的“全选”功能,是对每个复选框一个一个的“点击”,而不是仅仅改变状态。这让我可以使用上面正在运行的代码 (
$('.select-product').on('click', this.QuickOrder.loadProduct);) 作为我的事件。
标签: javascript jquery html checkbox