Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery自调用函数无法访问变量?_Javascript_Jquery - Fatal编程技术网

Javascript jQuery自调用函数无法访问变量?

Javascript jQuery自调用函数无法访问变量?,javascript,jquery,Javascript,Jquery,我有一个自调用的javascript文件,我试图在onClick事件中获取moduleID 我做错了什么?另一件需要注意的事情是,我将其中的几个文件作为“小部件”包含,它们都有自己的moduleID。我担心,如果我将这个变量声明移到上面,使其成为一个全局变量,它是否会干扰其他同样声明moduleID变量的小部件 $(function() { // Define our vars var moduleID = 4, output = ''; ... Some m

我有一个自调用的javascript文件,我试图在onClick事件中获取moduleID

我做错了什么?另一件需要注意的事情是,我将其中的几个文件作为“小部件”包含,它们都有自己的moduleID。我担心,如果我将这个变量声明移到上面,使其成为一个全局变量,它是否会干扰其他同样声明moduleID变量的小部件

$(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()
,而不是调用IIFE
moduleID
将在
.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()
,而不是IIFE
moduleID
将在
.ready()
handler中提供,因为作用域不同,您无法访问。但是,如果您可以将
模块id
与元素本身保持在一起(作为
数据模块id=“4”
),那么您可以作为
$(this).data('module-id')
$(this.attr('data-module-id')
)进行访问。或者在以前的函数中绑定click事件(
$('[name=adminSearchGo')。单击
),如果定义了
moduleID
,我对这一行感到有点困惑:“您可以做的是将处理程序放在$()回调中,以便它位于相同的范围内。”