Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未在IE中调用复选框onclick函数_Javascript_Internet Explorer_Onclick - Fatal编程技术网

Javascript 未在IE中调用复选框onclick函数

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(){

我在HTML中有以下复选框:

函数更新设置(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.