在锚标记的onclick事件上未定义Javascript函数

时间:2016-07-14 11:14:21

标签: javascript html

我无法在锚标记的onclick事件中访问javascript函数。

在某些情况下,它正在工作,在某些情况下,不是。

任何机构都能说出它为什么会发生。

HTML代码 -

<a  href='#'  class="btn waves-effect waves-light bg-blue" id="startDeviceScan" onclick="call286Dart123('CollectSysInfo', '3c6c3e33bb65e8331bf4c91c0670492e');" >start device scan </a>

Javascript功能:

function call286Dart123(a,b) {
    console.log(a + "\t" + b);
}

小提琴链接

Fiddle Link

3 个答案:

答案 0 :(得分:10)

编辑由于@Dellirium在评论中指出,我修改了我的答案以反映这里的真实问题。但是,解决方案仍然有效。

问题是JSFiddle默认情况下会在文档加载时运行JavaScript。这意味着在 HTML之后加载了,因此在HTML中初始化onclick事件时就不会定义它。

关闭似乎存在问题。如果你在JSFiddle中将“加载类型”设置为“onload”,这就是它在内部的作用(你可以检查开发者控制台):

<script type="text/javascript">
    //<![CDATA[
        window.onload=function(){
            function call286Dart123(a,b) {
                console.log(a + "\t" + b);
            }
        }
    //]]> 
</script>

这意味着它在<{1}}事件的匿名事件处理程序中包装。由于变量(和函数)作用域受JavaScript中的函数约束,这使得它们不可用于全局作用域

解决方案:要解决此问题,请在“JavaScript”菜单下将“加载类型”更改为“无包装&amp; t; head&gt;”。就这么简单=)。

请参阅this JSFiddle fork作为工作示例。

换句话说,这只会将其更改为(同样,您可以通过访问我的JSFiddle上的开发人员控制台来验证这一点):

onload

其中,<script type="text/javascript"> //<![CDATA[ function call286Dart123(a,b) { console.log(a + "\t" + b); } //]]> </script> 将在全局范围内定义(在任何其他函数之外)。

有关闭包的更多信息,请查看MDN Docs

答案 1 :(得分:2)

如果可以提供帮助,请不要使用onclick属性来运行JavaScript。而是使用event listeners或JQuery on方法。

<a id="startDeviceScan">Do Something</a>

Vanilla JS:

<script>
   var el = document.getElementById("startDeviceScan");
   el.addEventListener("click", your_func, false);
</script>

JQuery的:

$( "#startDeviceScan" ).on( "click", your_func(1234));

如果您需要获取参数的元素属性,例如'1234',您可以使用data- attributes并使用JS或JQuery

引用它们

JSBin example

答案 2 :(得分:0)

适合我:

<script>
    function call286Dart123(a,b) {
	    console.log(a + "\t" + b);
    }
</script>

<a class="btn waves-effect waves-light bg-blue" id="startDeviceScan" onclick="call286Dart123('CollectSysInfo', '3c6c3e33bb65e8331bf4c91c0670492e');"  href='#' >start device scan </a>