Javascript:函数名称自动完成

时间:2014-06-24 11:40:57

标签: javascript function autocomplete

由于FireFox和Chrome的一些更新,似乎我有一个功能不再适用(在JavaScript中)。函数的名称是自动完成的,例如:

function autocomplete() {
    alert("autocomplete!");
}

显然,浏览器不再喜欢这个函数名,因为函数调用被忽略了。我试图将其重写为以下内容:

var autocomplete = function() {
    alert("autocomplete!");
};

但这对我没有帮助。但是,更改名称。但我不想在任何地方更改名称。你们中有没有人有解决方案吗?

编辑: 下面的小提琴演示了如何使用:http://jsfiddle.net/P43xs/ 我试图按事件触发该功能。

2 个答案:

答案 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。