我无法在锚标记的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);
}
小提琴链接
答案 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
引用它们答案 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>