Javascript jQuery自调用函数无法访问变量?
我有一个自调用的javascript文件,我试图在onClick事件中获取moduleID 我做错了什么?另一件需要注意的事情是,我将其中的几个文件作为“小部件”包含,它们都有自己的moduleID。我担心,如果我将这个变量声明移到上面,使其成为一个全局变量,它是否会干扰其他同样声明moduleID变量的小部件Javascript jQuery自调用函数无法访问变量?,javascript,jquery,Javascript,Jquery,我有一个自调用的javascript文件,我试图在onClick事件中获取moduleID 我做错了什么?另一件需要注意的事情是,我将其中的几个文件作为“小部件”包含,它们都有自己的moduleID。我担心,如果我将这个变量声明移到上面,使其成为一个全局变量,它是否会干扰其他同样声明moduleID变量的小部件 $(function() { // Define our vars var moduleID = 4, output = ''; ... Some m
$(function() {
// Define our vars
var moduleID = 4,
output = '';
... Some more stuff ...
});
//Listen for button click
$('[name=adminSearchGo]').click(function() {
alert(moduleID); // No Access
});
这不是关于jQuery,而是关于javascript变量范围。
您可以参考以下内容:
至于解决方案,您说这些文件是作为小部件包含的,因此最好将一个模块的所有行为放在这个模块中。像这样:
$(function() {
// Define our vars
var moduleID = 4,
output = '';
... Some more stuff ...
//Listen for button click
$('[name=adminSearchGo]').click(function() {
alert(moduleID);
});
});
函数内部定义的任何内容都不能在函数外部访问 您可以做的是将绑定放在
$(function(){…})
中,以便它可以看到变量
$(function() {
// Define our vars
var moduleID = 4,
output = '';
//Listen for button click
$('[name=adminSearchGo]').click(function() {
alert(moduleID); // No Access
});
});
此外,根据此脚本的运行位置,将
.click
绑定放在$(function(){…})
之外可能无法工作,因为元素可能还不存在。$(function(){…})
的全部目的是在DOM就绪时调用该函数。所讨论的函数是调用.ready()
,而不是调用IIFEmoduleID
将在.ready()
处理程序中可用,不过您也可以利用.data()
将moduleID
附加到文档中,输出作为文档数据()
对象中的数组;使用单独的.ready()
:$(函数(){})
处理程序来设置.data()
。请注意,目前此
是.ready()
处理程序中的文档
:$(function(){})
$(函数(){
//定义我们的变量
var moduleID=4,
输出='';
$(此)。数据({
“moduleID”:[moduleID],
输出:[输出]
})
//…更多的东西。。。
});
$(函数(){
//定义我们的变量
var moduleID=5,
输出=“abc”;
$(this).data().moduleID.push(moduleID);
$(this.data().output.push(output);
//…更多的东西。。。
});
$(函数(){
//定义我们的变量
var moduleID=6,
output=“def”;
$(this).data().moduleID.push(moduleID);
$(this.data().output.push(output);
//听按钮点击
$(“[name=adminSearchGo]”。单击(函数(){
警报($(document.data().moduleID[0]);//无访问权限
});
console.log($(document.data())
})
< /代码> $(函数){var a,b,c;}函数内定义的所有VAR(如A、B、C)都不可用,可以将其视为一个外壳。
1.将风险值定义为全局风险值;
2.导出变量,如“window.xxx=var(如a、b、c)”
3.导出一个函数,该函数可以访问var函数,问题是调用.ready()
,而不是IIFEmoduleID
将在.ready()
handler中提供,因为作用域不同,您无法访问。但是,如果您可以将模块id
与元素本身保持在一起(作为数据模块id=“4”
),那么您可以作为$(this).data('module-id')
或$(this.attr('data-module-id')
)进行访问。或者在以前的函数中绑定click事件($('[name=adminSearchGo')。单击),如果定义了moduleID
,我对这一行感到有点困惑:“您可以做的是将处理程序放在$()回调中,以便它位于相同的范围内。”