jQuery全局变量

时间:2011-12-05 17:10:56

标签: javascript jquery global-variables

有人可以解释为什么这不起作用:

$(function() { 
   var damg = $(".hidden").val();

    $("button").click(function() {
        alert(damg);
    });
});

jsFiddle:http://jsfiddle.net/raFnT/

使用全局变量是否合适?我还读过,每次打字都比较慢吗?

详细解释:

我有这个:

$("button").click(function() {
            alert(damg);
        });

并且damg是输入的值:var damg = $(".hidden").val();

当您在输入中输入内容时,然后按下按钮,提醒该输入的值

我可以用

$("button").click(function() {
var damg = $(".hidden").val();
                alert(damg);
            });

但有一点我将拥有100个功能,我最终将会这样:

$("button1").click(function() {
    var damg = $(".hidden").val();
                    alert(damg);
                });

$("button2").click(function() {
    var damg = $(".hidden").val();
                    alert(damg);
                });

$("button3").click(function() {
    var damg = $(".hidden").val();
                    alert(damg);
                });

$("button4").click(function() {
    var damg = $(".hidden").val();
                    alert(damg);
                });

$("button5").click(function() {
    var damg = $(".hidden").val();
                    alert(damg);
                });

我想设置一个全局变量,以便在每个函数上我都不需要再次调用该函数。

这样的事情:

var damg = $(".hidden").val();

$("button1").click(function() {
        alert(damg);
    });

$("button2").click(function() {
        alert(damg);
    });

$("button3").click(function() {
        alert(damg);
    });

$("button").click(function() {
        alert(damg);
    });

$("button4").click(function() {
        alert(damg);
    });

$("button5").click(function() {
        alert(damg);
    });

5 个答案:

答案 0 :(得分:7)

你有它倒退,一个全局变量必须写在函数的外面。

您的代码不起作用,因为.hidden没有值。

http://jsfiddle.net/raFnT/2/

使用全局变量是不好的做法,除非你真的需要全局变量。我不知道你每次打字都是什么意思。

此外,您没有在点击处理程序中重新加载该值。

$(function() {            
    $("button").click(function() {
        var damg = $(".hidden").val();
        alert(damg);
    });            
});

http://jsfiddle.net/raFnT/6/

为了得到一个好的答案,OP想要的是blur函数。

$(function() {     
    var damg;

    $(".hidden").blur(function () {
        damg = $(".hidden").val();
    });

    $("button").click(function() {
        alert(damg);
    });            
});

http://jsfiddle.net/raFnT/7/

答案 1 :(得分:1)

你的例子正在运作。问题是您正在为文档准备好damg。在准备好文档时,文本框中没有任何值。如果您指定了默认值,它将在按钮单击时提醒该值。你可以在这个小提琴中看到这个:http://jsfiddle.net/raFnT/1/

如果您想在每个按钮上更改damg的值,请点击将代码更改为:

var damg;

$("button").click(function() {
    damg = $(".hidden").val();
    alert(damg);
});

答案 2 :(得分:0)

当函数首次执行时,会立即设置damg变量 - 您需要在click函数本身中设置var,以便它在那时从字段中获取值。

不确定为什么这会被投票 - 这就是你所要求的:

$(function() { 

   var damg = $(".hidden").val();

    $("button").click(function() {
        damg = $(".hidden").val();
        alert(damg);
    });

});

甚至更简单:

$(function() { 

    $("button").click(function() {
        alert( $(".hidden").val(); );
    });

});

答案 3 :(得分:0)

只需添加我的两分钱,这里是相同的解决方案,但使用更改功能来监控更改。

<强> JS

For each cell in Range(<your range>)

    If cell.value = '0000000000' then

      cell.value = cells(cell.row,cell.column-1).value

    end if

Next

答案 4 :(得分:-1)

这不是一个全局变量。这是一个范围为你传递给jQuery的就绪处理程序的匿名函数的var。

不起作用的原因(由于不起作用,我认为你的意思是警告空字符串)是因为在DOM加载时分配了damg。那时,您的文本框没有值。所以它实际上是有效的。如果您在单击按钮时想要文本框的值,则需要在单击处理程序中获取它的值。

您可以通过执行以下操作来缓存DOM查找:

$(function() {
    var damg = $(".hidden");

    $("#one").click(function() {
        alert("button one: " + damg.val());
    });

    $("#two").click(function() {
        alert("button two: " + damg.val());
    });
});

<input type="text" class="hidden" placeholder="Type text here">
<button id="one">Click me(1)!</button>
<button id="two">Click me(2)!</button>