[转载]chrome中remove函数的坑 – 斯诺登 – 博客园.
起因
测试的浏览器:ie7 ie8 safari firefox chrome
出现问题代码:
<a href= "#" id= "test" onclick= "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= "#" onclick= "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/
教训
详细整洁而且有意义的命名很重要。
转载请注明出处,谢谢。