嵌套函数中的JQuery作用域

时间:2014-04-11 21:35:11

标签: jquery scope

这有效:

$(document).ready(function(){

    $("#inputbuttonid").on("click", function(){ 

        var inputtext = $("#inputtextid").val();
        alert(inputtext);

    });

});

但这不起作用:

$(document).ready(function(){

    var inputtext = $("#inputtextid").val();

    $("#inputbuttonid").on("click", function(){ 

        alert(inputtext);

    });

});

“工作”是指它提醒正确的信息。

以上两种情况的唯一区别在于,在第二种情况下,我把

var inputtext = $("#inputtextid").val();

在外部函数中,而在第一个函数中,我把它放在内部函数中。

根据JQuery手册,“本地范围通过函数工作”,意思是“在另一个函数中定义的任何函数都可以访问外部函数中定义的变量”(引用自JQuery手册)。

那么,为什么在上面的第二种情况下,内部函数是否无法访问“inputtext”?

2 个答案:

答案 0 :(得分:5)

  

那么,为什么在上面的第二种情况下,内部函数是否无法访问" inputtext"?

它确实有访问 1 ,但您正在执行之前用户输入值的语句。当DOM准备就绪时,立即读取该值,而不是在用户单击按钮时读取。

  

上述两种情况的唯一区别在于,在第二种情况下,我将[...]放在外部函数中,而在第一种情况下,我把它放在内部函数中。

此更改的结果是该语句现在在不同的时间执行,输入字段尚未具有值。


1:如果没有,你会收到参考错误。

答案 1 :(得分:0)

在第二个示例中,您的变量在文档加载时初始化,并且click函数中没有代码来获取新值。这可行:

$(document).ready(function(){

    var inputtext = $("#inputtextid").val();

    $("#inputbuttonid").on("click", function(){ 
        inputtext = $("#inputtextid").val();
        alert(inputtext);

    });

});