微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我无法在锚标记的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

解决方法

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

问题是JSfiddle认情况下使JavaScript在文档加载上运行.这意味着JS在HTML之后加载,因此在HTML中初始化onclick事件时不会定义它.

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

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

这意味着它被包装在onload事件的匿名事件处理程序中.由于变量(和函数)作用域受JavaScript中的函数约束,因此它们不适用于全局作用域

解决方案:要解决此问题,请在“JavaScript”菜单下将“加载类型”更改为“无包装& t; head>”.这很容易=).

请参见this JSFiddle fork作为工作示例.

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

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

其中,cal286Darkt123将在全局范围内定义(在任何其他函数之外).

关闭合的更多信息,请查看MDN Docs.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐