叫我在HTML下面的複選框:複選框的onclick功能不是在IE
上點擊
function updateSettings(id, bit) {
alert('0');
}
<input type="checkbox" onclick="alert('1');updateSettings(0, 1);alert('2');" />
在IE11我得到警報1,2,但不爲0:不執行功能在所有。
在Chrome中一切正常。
叫我在HTML下面的複選框:複選框的onclick功能不是在IE
上點擊
function updateSettings(id, bit) {
alert('0');
}
<input type="checkbox" onclick="alert('1');updateSettings(0, 1);alert('2');" />
在IE11我得到警報1,2,但不爲0:不執行功能在所有。
在Chrome中一切正常。
發現了這個問題,但它很平穩。如果您將函數名稱更改爲小寫,那麼它可以工作。
function updatesettings(id, bit) {
alert('0');
}
<input type="checkbox" onclick="alert('1');updatesettings(0, 1);alert('2');" />
DEMO:http://codepen.io/anon/pen/YXLgxJ
UPDATE:作爲濟米具有解釋updateSettings是在IE一個內置的方法document.updateSettings()
,這將在onclick
事件,而不是被觸發我們的方法window.updateSettings()
哇,這很奇怪,我們現在只能在onclick函數中使用小寫嗎? – Alexander
大聲笑..這真的很奇怪。無論如何,這是IE。 –
我建議不要使用內聯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" />
功能updateSettings
是在IE上定義的document
對象。看到這個documentaion。
當你內聯一個調用,如在這種情況下,在onclick
中,如果函數被定義,它將首先在元素本身中查找。然後它會搜索DOM
樹到document
以查看函數是否被定義(有些元素被搜索,有些不是,不幸的是我不知道直到@ user4749485寫下他的評論爲止)的規則,並且之後,作爲最後的手段在window
。正如它發現它,它運行它。
由於您可能在全局對象(window
)上定義了您自己的updateSettings,因此在IE中未觸發它,因爲在document
對象上定義的函數首先被找到。
神祕的bug結束:-)
UPDATE:
@ user4749485指向的鏈接解釋這個在w3 site,信息項1.10 - 詞法環境範圍。概括起來:
<element onclick="functionFoo();">bar</element>
意味着以下過程:
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.
(1)=一個元件屬於一個形式=一個元件是一個形式元素的內部。粗略地說,它必須是一個表單元素,就像在輸入元素的問題中一樣。
@ user4749485非常感謝您的鏈接,我相應地更新了這篇文章。這很好,我們現在有確切的信息。 – Zimmi
它在我的IE 11中工作:http://codepen.io/anon/pen/WvJmOv – connexo
@connexo,不在我的地址 – JNF
@ user4749485 IE在文檔對象上定義了一個函數'updateSettings',查看我的答案。 – Zimmi