锚标记的onclick事件未定义Javascript函数 [英] Javascript function is undefined on onclick event of anchor tag

查看:117
本文介绍了锚标记的onclick事件未定义Javascript函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在定位标记的onclick事件中,我无法访问javascript函数.

I am not able to access javascript function in onclick event of the anchor tag.

在某些情况下它可以工作,在某些情况下则不能.

In some cases it is working and in some cases , not.

任何人都可以说出发生原因的原因.

Can any body tell why it is happening.

HTML代码-

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

JavaScript函数:

Javascript function :

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

小提琴链接

小提琴链接

推荐答案

编辑由于@Dellirium在评论中指出了什么,因此我对答案进行了修改,以反映此处的真实问题.但是,该解决方案仍然可以使用.

EDIT Due to what @Dellirium pointed out in the comment, I've revised my answer to reflect the true issue here. The solution would still work, however.

问题在于,默认情况下,JSFiddle使JavaScript在文档加载时运行.这意味着JS是在HTML之后 加载的,因此在HTML中初始化onclick事件时将不会对其进行定义.

The problem is that JSFiddle makes the JavaScript run on document load by default. This means that the JS is loaded after the HTML, and therefore it wouldn't have been defined at the time the onclick event was initialized in the HTML.

关闭似乎是一个问题.如果您在JSFiddle中将加载类型"设置为"onload",则这是它在内部执行的操作(您可以检查开发人员控制台):

It seems to be a problem with closures. If you have "Load Type" set to "onload" in JSFiddle, this is what it does internally (you can check the developer console):

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

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

This means that it is wrapped in in an anonymous event handler to the onload event. And since variable (and function) scopes are bound by functions in JavaScript, this makes them not available to the global scope

解决方案:要解决此问题,请在"JavaScript"菜单下,将加载类型"更改为不包裹-&t; head>".就是这么简单=).

Solution: To fix this, under the "JavaScript" menu, change "Load Type" to "No wrap - in &t;head>". It's that easy =).

请参见此JSFiddle分叉作为工作示例.

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

In other words, this would simply change it to (again, you can verify this by visiting the developer console on my JSFiddle):

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

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

In which, cal286Darkt123 would be defined in the global scope (outside any other functions).

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

For more info on closures, check the MDN Docs.

这篇关于锚标记的onclick事件未定义Javascript函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆