jquery中变量的函数范围

时间:2012-08-20 12:37:39

标签: jquery radio-button alert

这是一个简单的代码 -

$(document).ready(function() {       
        var genvalue="";    
    $("input:radio[name=gender]").click(function() {
    genvalue = $(this).val();
    alert (genvalue);
    }); 
alert (genvalue);   
     //genvalue = $('#gender').val();
//alert (genvalue);

value = $("#edu_det1").val();

more code.................goes ......

我希望alert (genvalue)的值即使不是通过点击事件调用也会发出警报,但是当单选按钮单击第一个警报提醒的值时,第二个函数没有警告正确的值。我给出空值。

5 个答案:

答案 0 :(得分:1)

Javascript具有functioncope - 变量的生命周期仅限于执行它的封闭函数。

您在点击功能中创建一个新变量。相反,您应该为现有变量赋值。所以你需要写

var genvalue="";
$("input:radio[name=gender]").click(function() {
    /* omit the "var" to assign a value to the variable genvalue*/
    genvalue = $(this).val();
});
alert(genvalue) // alerts genvalue, in this case probably ""
                // because the alert gets called before the click-handler fired

而不是:

var genvalue="";
$("input:radio[name=gender]").click(function() {
    /* This creates a new variable which is only visible in the click-function */
    var genvalue = $(this).val();
});
alert(genvalue) // will always alert "" and never the value assigned to
                // the var inside your click handler function

答案 1 :(得分:0)

如果您希望您的genvalue变量在文档就绪函数之外可用,请在函数外部定义它。

var genvalue="";
$(document).ready(function() {       
   $("input:radio[name=gender]").click(function() {
   genvalue = $(this).val();
   alert (genvalue);
});
alert (genvalue);   

此外,一旦定义了变量,就不需要再次使用var了。

答案 2 :(得分:0)

genvalue不在函数范围内,因为您在函数内部使用var定义它。

var genvalue="";

$(document).ready(function() {       
    genvalue="";
    $("input:radio[name=gender]").click(function() {
        genvalue = $(this).val();
        alert (genvalue);
    }); 

alert (genvalue);   
//genvalue = $('#gender').val();
//alert (genvalue);

value = $("#edu_det1").val();

答案 3 :(得分:0)

第二次调用alert时,不会提供正确的值,因为在加载文档时会调用

这意味着没有可能 单选按钮上调用了click回调,因此genvalue变量将会未定义。

您还在函数中使用genvalue关键字声明var,该关键字将范围指向该函数体,使其无法从{{1}外部访问回调函数。

答案 4 :(得分:0)

单击单选按钮时,以及一旦触发文档就绪事件,就会提醒genvalue。第二个是第一个被触发,它没有任何值,因为你在顶部声明为

var genvalue="";

如果您想以任一方式提醒正确的值,请尝试this fiddle

$(document).ready(function() {       
    var genvalue=$("input:radio[name=gender]").val();

     $("input:radio[name=gender]").click(function() {
      genvalue = $(this).val();
        alert (genvalue);
       });
     alert (genvalue);
 });