我有一个带搜索框的Web应用程序,onKeypress事件调用Query.keyPress()
。查询在包含的javascript文件中定义。大部分时间都可以正常工作。
在某些屏幕的IE10上,尝试使用搜索框会出错:
Error: Object doesn't support property or method 'keyPress'
我发现有些屏幕的查询表单的名称和ID为“查询”。它似乎在IE10中出现在全局范围内,并覆盖了javascript中的对象文字。有关信息,搜索框不在此表单中。
我已使用alert(Query);
替换了onKeypress代码,我看到[object HTMLFormElement]
确认了正在发生的事情。
有没有人知道如何在IE10上阻止这种情况发生?
答案 0 :(得分:2)
使用您自己的命名空间可以否定此问题,而不是一次又一次地污染全局范围。
var MY_STUFF = {};
MY_STUFF.Query = function () {};
MY_STUFF.MY_CONST = 4;
MY_STUFF.utilityFunction = function () {};
...这样,如果添加名为MY_STUFF
的表单元素,一切都会中断,但如果添加名为Query
,MY_CONST
或{{的表单元素,则不会中断1}}(不是最好的名字,但你得到了要点)。
就像我说的那样,它不会修复问题,但它会否定它。污染全球范围也是一种不好的做法。
当然,您可以通过闭包完全不使用全局变量。但是,如果您的应用程序分布在多个文件中,并且没有适合组合文件的构建过程,则可能需要进行大量重组。
utilityFunction
答案 1 :(得分:0)
可能这应该有效。在声明变量Query时,请在它之前提供一个var关键字。
var Query = new Object (); //right practice
Query = new Object (); //wrong practice