IE10 - 避免javascript的全局范围内的表单名称

时间:2013-04-18 10:57:49

标签: javascript html internet-explorer internet-explorer-10

我有一个带搜索框的Web应用程序,onKeypress事件调用Query.keyPress()。查询在包含的javascript文件中定义。大部分时间都可以正常工作。

在某些屏幕的IE10上,尝试使用搜索框会出错:

Error: Object doesn't support property or method 'keyPress'

我发现有些屏幕的查询表单的名称和ID为“查询”。它似乎在IE10中出现在全局范围内,并覆盖了javascript中的对象文字。有关信息,搜索框不在此表单中。

我已使用alert(Query);替换了onKeypress代码,我看到[object HTMLFormElement]确认了正在发生的事情。

有没有人知道如何在IE10上阻止这种情况发生?

2 个答案:

答案 0 :(得分:2)

使用您自己的命名空间可以否定此问题,而不是一次又一次地污染全局范围。

var MY_STUFF = {};

MY_STUFF.Query = function () {};
MY_STUFF.MY_CONST = 4;
MY_STUFF.utilityFunction = function () {};

...这样,如果添加名为MY_STUFF的表单元素,一切都会中断,但如果添加名为QueryMY_CONST或{{的表单元素,则不会中断1}}(不是最好的名字,但你得到了要点)。

就像我说的那样,它不会修复问题,但它会否定它。污染全球范围也是一种不好的做法。


当然,您可以通过闭包完全不使用全局变量。但是,如果您的应用程序分布在多个文件中,并且没有适合组合文件的构建过程,则可能需要进行大量重组。

utilityFunction

答案 1 :(得分:0)

可能这应该有效。在声明变量Query时,请在它之前提供一个var关键字。

var Query = new Object (); //right practice

Query = new Object (); //wrong practice