2011-07-03 27 views
12

我有一个选择下拉列表的形式,我的选择标记是这样的:JavaScript的保留字:“预设”

<select name='preset' onchange='preset(this);'>

现在,我有我的JavaScript函数只是做alert('test');。那么,当我在下拉菜单中更改我的选择时,出现错误提示“预设不是功能”。是的,我验证了它的拼写正确,我甚至在页面加载时对它进行了通用调用,并获得了警报。

如果我改变我的函数名称,如presetx它工作得很好。所以我想可能“预设”是JavaScript中的某种保留字,但我似乎无法找到任何说法。为什么会发生?

更新

目前我没有我的测试页上别的除了我的形式和功能。没有框架包含或其他代码,所以我知道它不是那样的。

回答

15

某些浏览器将具有name属性的元素映射到全局变量。因此<select name='preset' onchange='preset(this);'>实际上创建(在某些浏览器中)全局属性preset。这会覆盖preset函数。

由于preset现在是一个HTMLSelectElement对象,而不是一个函数,您会得到一个“不是函数”的错误。

+0

aaah有道理,我怎么可能错过了:/ – newbiejsperson

+6

因为这是一个虚拟的反特征,它永远不应该存在,也不应该被导入W3C标准。但我离题... – lonesomeday

+2

哎呀,我从来不知道这件事。 Javascript是自己的'register_globals'(虽然比PHP更危险) –