Javascript 未在IE中调用复选框onclick函数
我在HTML中有以下复选框:Javascript 未在IE中调用复选框onclick函数,javascript,internet-explorer,onclick,Javascript,Internet Explorer,Onclick,我在HTML中有以下复选框: 函数更新设置(id,位){ 警报('0'); } 找到了问题,但它是一个障碍。如果将函数名更改为小写,则它可以工作 函数更新设置(id,位){ 警报('0'); } 我建议不要使用内联onclick事件,而是使用jquery为复选框定义事件: function updateSettings(id, bit) { alert('0'); } jQuery(document).ready(function(){
函数更新设置(id,位){
警报('0');
}
找到了问题,但它是一个障碍。如果将函数名更改为小写,则它可以工作
函数更新设置(id,位){
警报('0');
}
我建议不要使用内联onclick事件,而是使用jquery为复选框定义事件:
function updateSettings(id, bit) {
alert('0');
}
jQuery(document).ready(function(){
jQuery("#cbMyCheckbox").click(function(){
alert('1');
updateSettings(0, 1);
alert('2');
});
});
然后在html中:
<input type="checkbox" id="cbMyCheckbox" />
函数
更新设置
在IE中定义在文档
对象上。看这个
当您将调用放入内联时(如本例中的onclick
),如果定义了函数,它将首先查看元素本身。然后它将搜索DOM
树,直到document
,以查看函数是否已定义(有些元素已搜索,有些元素未搜索,不幸的是,直到@user4749485在下面写下他的评论,我才知道控制此操作的规则),然后,作为最后的手段,在窗口中搜索。当它找到它时,它运行它
由于您可能在全局对象(窗口
)上定义了自己的更新设置,因此它不会在IE中触发,因为在文档
对象上定义的函数是首先找到的
神秘虫子的终结:-)
更新:
@user4749485指向第页解释这一点的链接,信息在第1.10项-词汇环境范围中。总而言之:
<element onclick="functionFoo();">bar</element>
(1) =元素属于某个窗体!=元素位于表单元素内部。大致上,它必须是一个表单元素,就像问题中的输入元素一样。它在我的IE 11中工作:@connexo,而不是在中mine@user4749485IE在文档对象上定义了一个函数updateSettings
,请看我的答案。哇,真奇怪,从现在起,我们只能在onclick函数中使用小写字母?这在我的例子中有点不方便:复选框是自动生成的,使用jquery定义事件要复杂得多:需要从一些复选框属性中获取函数参数……这就是HTML5数据-
属性的用途;)@泰瑞:很高兴知道,谢谢。但在我的例子中,自动生成更简单;)@user4749485非常感谢你的链接,我已经相应地更新了这篇文章。太好了,我们现在有确切的信息了。
Does element.functionFoo exist ? YES ==> use this function.
ELSE
Does element belong(1) to a form and form.functionFoo exist ? YES ==> use this function.
ELSE
Does document.functionFoo exist ? YES ==> use this function.
ELSE
Does window.functionFoo exist ? YES ==> use this function.
ELSE
crash.