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')" /> 
+0

可能相关的替代domEle.change();:http://stackoverflow.com/questions/208471/getting-jquery-to-recognise-change-in-ie – 2010-08-27 18:40:13

+0

我使用的点击和变化:/ – JustLoren 2010-08-27 18:45:35

+1

离开'点击'处理程序并删除对“变更”的引用 - 这将重复该过程并可能产生意想不到的后果。也不要手动调用'.change()' – lincolnk 2010-08-27 18:59:50

删除任何与change。与domEle.click();

+0

tyvm - .click导致针对onclick注册的事件与预期参数一起引发 – JustLoren 2010-08-27 19:20:00