我有一个带有选择下拉列表的表单,我的选择标记如下所示:
<select name='preset' onchange='preset(this);'>
现在我的JavaScript函数只有alert('test');
。好吧,当我在下拉列表中更改我的选择时,我收到一条错误,说“预设不是功能”。是的,我确认它拼写正确,我甚至在页面加载时对它进行了通用调用并得到了警报。
如果我将我的函数名称更改为其他内容,例如presetx
,它就可以了。所以我认为“预设”可能是JavaScript中的某种保留字,但我似乎无法找到任何这样的说法。为什么会这样?
更新
目前我的测试页上没有其他任何内容,除了我的表单和功能。没有框架包含或其他代码,所以我知道它不是那样的。
答案 0 :(得分:15)
某些浏览器将具有name
属性的元素映射到全局变量。所以<select name='preset' onchange='preset(this);'>
实际上(在某些浏览器中)创建了一个全局属性preset
。这会覆盖preset
函数。
由于preset
现在是HTMLSelectElement对象,而不是函数,因此会出现“非函数”错误。