起因
测试的浏览器:ie7 ie8 safari firefox chrome
出现问题代码:
<a href="#" id="test" οnclick="remove();">test</a>
<script>
var remove=function(){
alert('111');
}
</script>
结果:
ie7 ie8 safari firefox 均正常弹出 “111”
chrome <a>元素被移除
http://www.cnblogs.com/danhuang/
经过
首先我怀疑remove是javascript保留字(关键字),经证实如我所知remove并非是javascript保留字(关键字)
javascript的保留字(关键字)请参考:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Reserved_Words
然后在chrome的界面按下F1到帮助里面去搜,也没搜到相关的东西。于是决定自己研究。。。
删掉javascript代码,打开开发者工具,输入:
window.remove
看一下remove函数有没有被定义了,结果是 undefined
说明没有被定义,其实这步是多余的。。。
http://www.cnblogs.com/danhuang/
继续看<a>元素的__proto__
document.getElementById("test").__proto__
在 __proto__: HTMLElement 下的 __proto__: Element 下,我们看到了
remove: function remove() { [native code] }
至此,真相浮现出来了
http://www.cnblogs.com/danhuang/
结果
解决办法1:改函数名,什么drop啊,remove1啊之类的,记住别用delete,哈哈~~
解决办法2(推荐):使用命名空间(namespace)
<a href="#" οnclick="XW.remove();">test</a>
<script>
XW = {};
// add remove() to the custom namespace, not the global namespace
XW.remove = function() {
// some code here
};
</script>
http://www.cnblogs.com/danhuang/
探究
chromium Issue:https://code.google.com/p/chromium/issues/detail?id=170395
webkit changeset:http://trac.webkit.org/changeset/129400
http://www.cnblogs.com/danhuang/
教训
详细整洁而且有意义的命名很重要。
转载请注明出处,谢谢。