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

时间:2016-07-03 02:46:37

标签: javascript jquery

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

我在这里做错了什么?需要注意的另一件事是,我将其中的几个文件包含在" Widgets"都有自己的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
});

4 个答案:

答案 0 :(得分:1)

无法在函数外部访问函数内定义的任何内容。

您可以做的是将您的绑定放在$(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准备就绪时调用该函数。

答案 1 :(得分:0)

它不是关于jQuery,而是关于javascript变量范围 你可以参考这个:
What is the scope of variables in JavaScript?

对于解决方案,您说这些文件作为小部件包含在内,因此最好将一个模块的所有行为放在此模块中。像这样:

$(function() {

    // Define our vars
    var moduleID = 4,
        output = '';

    ... Some more stuff ...


    //Listen for button click
    $('[name=adminSearchGo]').click(function() {
        alert(moduleID);
    });
});

答案 2 :(得分:0)

问题的功能是呼叫.ready(),而不是IIFE。在moduleID处理程序中可以使用.ready(),但您也可以使用.data()moduleIDoutput附加到document作为document .data() .ready()个对象中的数组;使用单独的$(function(){}).data()处理程序来设置this。请注意,目前document .ready()位于$(function(){})处理程序中:$(function() { // Define our vars var moduleID = 4, output = ''; $(this).data({ "moduleID": [moduleID], output: [output] }) // ... Some more stuff ... }); $(function() { // Define our vars var moduleID = 5, output = "abc"; $(this).data().moduleID.push(moduleID); $(this).data().output.push(output); // ... Some more stuff ... }); $(function() { // Define our vars var moduleID = 6, output = "def"; $(this).data().moduleID.push(moduleID); $(this).data().output.push(output); //Listen for button click $("[name=adminSearchGo]").click(function() { alert($(document).data().moduleID[0]); // No Access }); console.log($(document).data()) })

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="button" name="adminSearchGo" value="click" />
{{1}}

答案 3 :(得分:0)

$(function(){var a,b,c;})函数内部定义的所有变量(如a,b,c)在外部都不可用。您可以将其视为一个附件。 1.将var定义为全局变量; 2.像“window.xxx = var(像a,b,c)”那样导出var 3.导出一个可以访问var

的函数