Javascript Checkbox.OnChange事件没有正确触发
问题描述:
所以我有一个商业案例,我有组(称为Bundles),它们可以包含其他Bundles。现在,在我的界面中,我试图让它在检查顶层时自动检查(并禁用,但我还没有)子包。Javascript Checkbox.OnChange事件没有正确触发
为了达到这个目的,每个复选框都有一个onchange事件,它在this
中传递,还有一个应该检查的其他Bundle的逗号分隔列表。我在下面粘贴的代码表现出乎意料。也就是说,当我强制要求调用Change事件时(因为通过编程方式操纵选中的状态不会引发Change事件),所以使用完全相同的参数来调用原始Change事件。
这几乎就好像我打电话.change()
时,它传递了我原来的复选框(不是级联的)和孩子的原始列表。
我已经投入了大量的警报,并且离合器人员说“要为[正确的复选框]触发更改”,但是接下来的警报会显示“对原始/错误复选框启用禁用” ”。
关于为什么编程引发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);
}
});
}
}
和HTML的复选框的一个示例:
<input id="BundleAssignment_rptMainBundle_ctl02_chk1"
type="checkbox" name="BundleAssignment$rptMainBundle$ctl02$chk1"
onchange="disableChildren(this,'7,8')" onclick="disableChildren(this,'7,8')" />
答
删除任何与change
。与domEle.click();
+0
tyvm - .click导致针对onclick注册的事件与预期参数一起引发 – JustLoren 2010-08-27 19:20:00
可能相关的替代
domEle.change();
:http://stackoverflow.com/questions/208471/getting-jquery-to-recognise-change-in-ie – 2010-08-27 18:40:13我使用的点击和变化:/ – JustLoren 2010-08-27 18:45:35
离开'点击'处理程序并删除对“变更”的引用 - 这将重复该过程并可能产生意想不到的后果。也不要手动调用'.change()' – lincolnk 2010-08-27 18:59:50