为什么我得到"未捕获TypeError:下载不是函数"

时间:2015-06-01 12:45:41

标签: javascript

<a href="#" onClick="download();">download</a>

<script type="text/javascript">
function download() {
    alert("hello");
}
</script>

点击链接时,我看不到提醒。相反,它说功能不存在。为什么呢?

当我将下载重命名为downloadx时,它仍然无效,因此我的功能名称不是问题。

2 个答案:

答案 0 :(得分:2)

首先,@ gmo说由于函数的名称,你的代码永远不会在JSFiddle之外工作。

详细了解HERE (Can't use “download” as a function name in javascript)

从现在起,我将使用downloadx作为功能名称

相反,即使您使用downloadx,JSFiddle引起的另一个问题也会使您的代码无法正常运行。 simple-example-doesnt-work-on-jsfiddle

JSfiddle将您的代码包装在window.onload函数中,因此download函数不在范围内。

//<![CDATA[ 
window.onload=function(){
function downloadx() {
    alert("hello");
}
}//]]>  

解决方案1 ​​JSFiddle

你应该直接在窗口上声明它

window.downloadx = function() {
    alert("hello");
}

解决方案2 JSFiddle

Select No wrap - in <head>

在JSFiddle的左栏中

NB

在任何情况下,你都应该为函数使用另一个名称,这就是为什么它不能在JSFiddle之外工作。

答案 1 :(得分:0)

我仍然认为这是一个重复的问题:Can't use "download" as a function name in javascript
并且与a标记中的函数名称相关。

  

...&LT a取代;如下所述,元素在HTML5中具有下载属性   here ...

也许可以采用一种解决方法,但绝对不建议使用浏览器本机功能。

但是..如果你仍然认为它不是......请试试这个:
(不需要黑客)

function download() {
    alert("hello");
}

function downloadx() {
    alert("hello");
}
<a href="#" onClick="download();">download</a> <-- not working
<br />
<a href="#" onClick="downloadx();">downloadx</a> <-- works
<br />
<span onClick="download();">download</span> <-- works

最后一个使用download作为function name并且也有效,为什么?
因为它不是&lt; a&gt;标签