由于FireFox和Chrome的一些更新,似乎我有一个功能不再适用(在JavaScript中)。函数的名称是自动完成的,例如:
function autocomplete() {
alert("autocomplete!");
}
显然,浏览器不再喜欢这个函数名,因为函数调用被忽略了。我试图将其重写为以下内容:
var autocomplete = function() {
alert("autocomplete!");
};
但这对我没有帮助。但是,更改名称。但我不想在任何地方更改名称。你们中有没有人有解决方案吗?
编辑: 下面的小提琴演示了如何使用:http://jsfiddle.net/P43xs/ 我试图按事件触发该功能。
答案 0 :(得分:2)
解决方案:
onclick="autocomplete();" // --> does not work
onclick="window.autocomplete();" // --> works
因此,在调用自动完成功能时,只需将其范围限定为窗口,然后它就会工作并显示警报(在小提琴中尝试)
原因:
输入元素具有名称“autocomplete”的属性,因此当您提及时
onclick="autocomplete();"
,在内部评估为autocomplete===this.autocomplete
,因此无效。 (当前上下文中的'this'是输入元素。)
因此,当您将其范围限定为window.autocomplete()
时,它会指向您已定义的自动完成功能。
答案 1 :(得分:0)
我可以在Chrome 35中重现这一点。
我已经创建了第二个解决方法:http://jsfiddle.net/5m7UD/1/
<input type="button" onclick="autocomplete();" value="Click me!" />
<input type="button" onclick="whatever();" value="Me too please!" />
<input type="button" id="id1" value="Second attempt" />
使用此脚本:
console.log(autocomplete)
function autocomplete() {
alert("This doesn't work, only in IE compatible mode or other, lder browsers :(");
}
function whatever() {
alert("This works, obviously...");
eval("console.log(autocomplete.toString())");
}
document.getElementById('id1').onclick = autocomplete;
最后一行有效。有趣的是,第一个输入按钮不起作用,尽管我在运行此脚本时在控制台中看到undefined
并且eval
打印出主体上面定义的函数。
(我使用eval
确保代码不能简单地保留对原始函数的引用。
当我运行代码并单击按钮时,我在控制台中看到此错误:Uncaught TypeError: string is not a function
在定义按钮的行上(即onclick="autocomplete();"
),所以它确实没有&# 39; t喜欢HTML。