Javascript Checkbox.OnChange事件未正确触发
所以我有一个商业案例,其中我有组(称为bundle),它们可以包含其他bundle。现在,在我的界面中,我试图让它在检查顶层时,自动检查(并禁用,但我还没有)子包 为了实现这一点,每个复选框都有一个onchange事件,它在其中传入Javascript Checkbox.OnChange事件未正确触发,javascript,jquery,html,Javascript,Jquery,Html,所以我有一个商业案例,其中我有组(称为bundle),它们可以包含其他bundle。现在,在我的界面中,我试图让它在检查顶层时,自动检查(并禁用,但我还没有)子包 为了实现这一点,每个复选框都有一个onchange事件,它在其中传入this,并有一个逗号分隔的列表,其中列出了应检查的其他捆绑包。我在下面粘贴的代码的行为出乎意料。也就是说,当我强制调用变更事件时(因为以编程方式操纵选中状态不会引发变更事件),随后的调用将使用与原始变更事件使用的参数完全相同的参数来结束 这几乎就像我调用.chang
this
,并有一个逗号分隔的列表,其中列出了应检查的其他捆绑包。我在下面粘贴的代码的行为出乎意料。也就是说,当我强制调用变更事件时(因为以编程方式操纵选中状态不会引发变更事件),随后的调用将使用与原始变更事件使用的参数完全相同的参数来结束
这几乎就像我调用.change()
时,它传递了我的原始复选框(不是级联复选框)和原始的子项列表
我已经输入了大量警报,关键的一个说“即将触发[正确的复选框]的更改”,但下一个警报说“禁用[原始/错误的复选框]”
关于为什么以编程方式引发更改事件会导致其参数混乱,有什么想法吗
function disableChildren(chkBundle, childBundles) {
var bundleId = chkBundle.id.substr(chkBundle.id.lastIndexOf("chk"));
alert("disable raised for '" + bundleId + "' using children '" + childBundles + "'");
jQuery("#BundleList input:checkbox[id*=" + bundleId + "id]").attr("checked", chkBundle.checked);
var childIds = childBundles.split(",");
for (var i = 0; i < childIds.length; i++) {
jQuery("#BundleList input:checkbox[id$=chk" + childIds[i] + "]").each(function(index, domEle) {
if (domEle.checked != chkBundle.checked) {
alert('about to check ' + domEle.id);
domEle.checked = chkBundle.checked;
alert('about to trigger change for ' + domEle.id);
domEle.change();
alert('done triggering ' + domEle.id);
}
});
}
}
函数禁用子对象(chkBundle、childbundle){
var bundleId=chkBundle.id.substr(chkBundle.id.lastIndexOf(“chk”));
警报(“使用子项“+childBundles+”””)禁用为“+bundleId+””引发的警报;
jQuery(“#BundleList输入:复选框[id*=”+bundleId+“id]”)attr(“checked”,chkBundle.checked);
var childIds=childBundles.split(“,”);
for(变量i=0;i
以及复选框的一个html示例:
<input id="BundleAssignment_rptMainBundle_ctl02_chk1"
type="checkbox" name="BundleAssignment$rptMainBundle$ctl02$chk1"
onchange="disableChildren(this,'7,8')" onclick="disableChildren(this,'7,8')" />
删除与更改有关的任何内容
。替换domEle.change()使用domEle.click()进行编码>代码>删除与更改相关的任何内容。替换domEle.change()使用domEle.click()进行编码>代码>可能相关:我同时使用了单击和更改:/离开单击
处理程序,删除对更改的引用-这将重复此过程,并可能造成意外后果。也不要手动调用.change()
是否将自定义change
方法作为expando添加到DOM元素中?没有一个标准的DOM方法被称为change()
就像有click()
@lincolnk:好的,如果我不应该手动调用change,我如何在这些复选框上引发change事件@bobince:我正在使用jQuery,它具有.change()函数。我不确定你的观点是什么。可能相关:我同时使用了单击和更改:/离开单击
处理程序,删除对更改
的引用-这将重复此过程,并可能造成意外后果。也不要手动调用.change()
是否将自定义change
方法作为expando添加到DOM元素中?没有一个标准的DOM方法被称为change()
就像有click()
@lincolnk:好的,如果我不应该手动调用change,我如何在这些复选框上引发change事件@bobince:我正在使用jQuery,它具有.change()函数。我不确定您的观点是什么。tyvm-。单击导致使用预期参数引发针对onclick注册的事件。tyvm-。单击导致使用预期参数引发针对onclick注册的事件