【问题标题】:scope of variable out of function in jqueryjquery中变量的作用域
【发布时间】:2012-08-20 21:02:14
【问题描述】:

这是简单的代码 -

$(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) 的值发出警报,即使它不是通过单击事件调用,而是当单击单选按钮时,第一个警报发出的警报值,而第二个函数没有发出正确的警报值。我给出空值。

【问题讨论】:

  • 这里很难理解你想要什么......也许你可以尝试重写你的帖子并解释到底出了什么问题......

标签: jquery radio-button alert


【解决方案1】:

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

您在 click 函数中创建了一个新变量。相反,您应该为已经存在的变量分配一个值。所以你需要写

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

【讨论】:

    【解决方案2】:

    当单选按钮被点击以及文档就绪事件被触发时,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);
     }); 
    

    【讨论】:

      【解决方案3】:

      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();
      

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          【解决方案5】:

          您第二次调用 alert 不会给出正确的值,因为它在文档加载时被调用

          这意味着不可能在您的单选按钮上调用了click 回调,因此genvalue 变量将未定义。

          您还在函数中使用 var 关键字声明了 genvalue,这会将其作用域限定为该函数体,使其无法从 click 回调函数外部访问。

          【讨论】:

            猜你喜欢
            • 2012-02-02
            • 2010-12-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-05-02
            • 2011-09-07
            • 1970-01-01
            相关资源
            最近更新 更多