Javascript jQuery全局变量

Javascript jQuery全局变量,javascript,jquery,global-variables,Javascript,Jquery,Global Variables,有人能解释一下为什么这样不行吗: $(function() { var damg = $(".hidden").val(); $("button").click(function() { alert(damg); }); }); jsFiddle: 使用全局变量好吗?我也读过,它是一个比每次打字都慢的选项 详细说明: 我有这个: $("button").click(function() { alert(damg);

有人能解释一下为什么这样不行吗:

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

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

使用全局变量好吗?我也读过,它是一个比每次打字都慢的选项

详细说明:

我有这个:

$("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);
    });
我想设置一个全局变量,这样在每个函数上我就不需要再次调用该函数了

大概是这样的:

$("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);
    });

如果是向后的,则必须在函数外部写入全局变量

$(function() {     
    var damg;

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

    $("button").click(function() {
        alert(damg);
    });            
});
您的代码无法工作,因为.hidden没有值

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

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

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

为了得到一个好的答案,OP需要的是
blur
功能

$(function() {     
    var damg;

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

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

你的例子很有效。问题是您正在文档就绪上设置
damg
。文档准备就绪时,文本框中没有值。如果您指定一个默认值,它将在单击按钮时警告该值。你可以在这把小提琴上看到这一点:

如果要更改每个按钮上的
damg
值,请单击将代码更改为:

var damg;

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

damg变量是在函数第一次执行时立即设置的——您需要在click函数本身中设置该变量,以便它在此时从字段中获取值

不知道为什么会被否决-这是你要求的:

$(function() { 

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

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

});
或者更简单地说:

$(function() { 

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

});

这不是一个全局变量。这是一个作用域为传递给jQuery的就绪处理程序的匿名函数的变量

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

$(function() {            
    $("button").click(function() {
        var damg = $(".hidden").val();
        alert(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>
$(函数(){
var damg=$(“.hidden”);
$(“#一”)。单击(函数(){
警报(“按钮一:+damg.val());
});
$(“#2”)。单击(函数(){
警报(“按钮二:+damg.val());
});
});
点击我(1)!
点击我(2)!

只需加上我的两分钱,这里有相同的解决方案,但使用更改功能来监视更改

JS

var damg;

$('#contact-name').on('change', function(){
    damg = $(".hidden").val();
});

这很好用。问题是在调用
var damg=$(“.hidden”).val()时,该字段还没有值。而且
damg
不是全局的。它是即时功能的本地。在输入中键入一些内容,然后按下按钮。然后?它将警告一个空值。因为输入字段的值在页面加载时分配给
damg
,而不是单击按钮时。如果希望在字段值更改时更新
damg
,则必须为文本字段设置
change
事件处理程序。字符串不会自动更新。当您按下按钮时,它不会检查其值吗?否。
.val()
返回一个字符串,您将该字符串分配给
damg
。单击按钮时,您只是在回显字符串,该字符串是在调用
var damg=$(“.hidden”).val()时指定的。你错了。在输入中键入一些内容,然后按click me。如果我有100个函数,我必须设置var damg=$(“.hidden”).val();100次,这是非常糟糕的解决方案。这就是为什么我试图将变量设置为全局变量,然后在输入中添加value='to'something',你说输入中没有任何内容。你有没有试着在输入中输入一些东西,然后点击按钮?我想我不会再帮你了,如果有什么可怕的事情,那就是你的问题。是的,现在检查我的问题。你也可以理解。谢谢你,更喜欢它。谢谢模糊是否对.text().length和任何其他事件计数?或者仅针对.val()?再次出错。更改输入值并单击按钮。到底是什么问题?我的示例在单击按钮时显示默认值。如果希望每次都更改该值,请查看我提供的建议代码更改。您可以在这里看到它的作用:如果我需要在100个不同的函数中使用该变量,我必须设置100x var damg=$(“.hidden”).val()?您可以将模糊事件添加到.hidden,这样无论何时更改,您的变量都会更新。