6
觸發
我遇到了以下問題的Safari瀏覽器5.0(不是在所有基於WebKit的瀏覽器),此代碼:看似不一致onstorage在Safari
<html>
<script>
var onstorage = function(evt) {
alert([evt.key, evt.oldValue, evt.newValue].join('\n'));
}
var onclick = function(evt) {
localStorage.setItem('test', Math.random());
}
var oninit = function() {
//actually, it works the same way with old "plain event" onclick
document.querySelector('#test').addEventListener('click', onclick, false);
window.addEventListener('storage', onstorage, false);
}
</script>
<body onload="oninit()">
<input id="test" type="button" value="setting a random value"/>
</body>
將觸發警戒,在我們點擊按鈕。儘管此代碼 -
<html>
<script>
var onstorage = function(evt) {
alert([evt.key, evt.oldValue, evt.newValue].join('\n'));
}
var onclick = function(evt) {
localStorage.setItem('test', Math.random());
}
var oninit = function() {
window.addEventListener('storage', onstorage, false);
//actually, it works the same way with old "plain event" onclick
document.querySelector('#test').addEventListener('click', onclick, false);
}
</script>
<body onload="oninit()">
<input id="test" type="button" value="setting a random value"/>
</body>
幾個觸發警報,預計不會。 我確實認爲這是一個錯誤,但不能有人解釋我 - 爲什麼只交換兩行代碼會導致這種奇怪的行爲?
鄧諾,'onstorage'不適合我。但總的來說,你應該避免調用全局變量/函數'onstorage'或'onclick'。因爲'onclick'可以作爲'window.onclick'訪問,所以即使沒有'addEventHandler',它也會接收'window'的點擊事件! – bobince 2010-09-27 00:12:38
bobince,傻我)))你是完全正確的 - 全球範圍內的onclick變量存在一些問題。儘管如此,這是一個錯誤,但不那麼神祕) – shabunc 2010-09-27 07:01:14
當您嘗試使用保留的全局方法名稱時,它如何成爲一個錯誤? – rxgx 2011-01-06 05:34:34