我是javascript和jquery的新手,但是我遇到了一个小问题。最新版本的Chrome和Firefox都在发生这种情况,因此我认为这不是浏览器问题。

相关代码在此处(这是HTML页面上脚本标记内的自调用函数)。

(function () {
    "use strict";
    var submitbutton = $('#submitcommand'),
        textinput = $('#textinput'),
        userinput = textinput.val();

    submitbutton.on('click', function() {
        alert("textinput is " + textinput.val());   // => works
        alert("userinput is " + userinput);     // => undefined

    });
}());


使用'textinput.val()',对alert()的第一个调用工作正常。对alert()的第二次调用不会返回任何可见的文本,因为'userinput'正在评估为'undefined'。

我尝试进入Firebug控制台并粘贴四个语句(两个分配和对alert()的两个调用),一个接一个。那行得通,并且得到我期望的结果。

所以问题是:on('click')函数中的'userinput'变量有什么变化?我在这里没看到什么?

提前致谢!

最佳答案

由于该函数是自调用的,因此将在页面加载时设置该变量。每次单击该按钮时都不会重新评估。在页面加载期间,您可能会发现:


输入为空
输入的内容比脚本的内容低(我认为更可能)


因此在设置时没有任何价值。您可能希望使变量的作用域为单击按钮:

(function () {
    "use strict";
    var submitbutton = $('#submitcommand'),
        textinput = $('#textinput')

    submitbutton.on('click', function() {
        var userinput = textinput.val();

        alert("textinput is " + textinput.val());   // => works
        alert("userinput is " + userinput);     // => undefined

    });
}());


另外,您将要确保脚本块位于页面底部,因为当调用该函数时,所有UI元素都将加载到浏览器中。

关于javascript - JQuery on(“click”)函数内部的“奇怪”变量分配行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13840291/

10-12 12:41
查看更多