Javascript:函数名称自动完成
Posted
技术标签:
【中文标题】Javascript:函数名称自动完成【英文标题】:Javascript: function name autocomplete 【发布时间】:2014-08-14 15:51:23 【问题描述】:自从对 FireFox en Chrome 进行了几次更新后,我的某个功能似乎不再起作用(在 javascript 中)。该函数的名称是自动完成的,例如:
function autocomplete()
alert("autocomplete!");
显然浏览器不再喜欢这个函数名了,因为函数调用被忽略了。我尝试将其重写为以下内容:
var autocomplete = function()
alert("autocomplete!");
;
但这对我没有帮助。不过改名字就好了。但我不想在使用它的任何地方更改名称。你们中的任何人都有解决方案吗?
编辑: 用法在以下小提琴中演示:http://jsfiddle.net/P43xs/ 我正在尝试通过事件触发该功能。
【问题讨论】:
jsfiddle.net/UwG4e --- 我的 chrome 不同意你的观点。 它甚至可以在 IE 中运行... 无法重现问题。 JavaScript 控制台是否有错误?代码还有什么问题吗?当您调试它时,它在哪里/如何失败?你的函数名没有错,肯定是有其他问题。 @putvande:它会改变什么? jsfiddle.net/UwG4e/1 提示:当你假设你的所有代码都必须正确并且编译器/解释器必须被破坏时,你通常是错的。 【参考方案1】:解决方案:
onclick="autocomplete();" // --> does not work
onclick="window.autocomplete();" // --> works
因此,在调用自动完成功能时,只需将其范围限定为窗口,然后它就会工作并显示警报(在您的小提琴中尝试过)
原因:
输入元素有一个名为“自动完成”的属性,所以当你提到
onclick="autocomplete();"
,在内部它评估为autocomplete===this.autocomplete
,因此什么也不做。 (当前上下文中的“this”是输入元素)。
因此,当您将其范围限定为 window.autocomplete()
时,它会指向您定义的自动完成功能。
【讨论】:
我的函数正在控制台中显示,尽管它没有通过事件执行。【参考方案2】:我可以在 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();"
),所以它真的不喜欢 html .
【讨论】:
这可能是因为浏览器试图将其与输入字段的自动完成属性相关联。我尝试使用 window.autocomplete();然后一切正常。 (奇怪!!) 是的,window.autocomplete() 或通过 JavaScript 设置 onclick 事件可以解决问题,尽管它需要在任何地方进行更改(不同的页面使用相同的 JavaScript 文件)。我认为最好的解决方案是把自己搞砸,到处更改函数的名称。谢谢大家帮助我。希望我们现在和将来也能帮助其他人。 @LaVomit:考虑在 Chrome 支持组中提问productforums.google.com/forum/#!categories/chrome以上是关于Javascript:函数名称自动完成的主要内容,如果未能解决你的问题,请参考以下文章
添加到 ace-editor 明智的自动完成功能:列出用户定义的函数和变量(javascript 语言)