2011-10-30 136 views
0

我有一种表单,我想用jQuery在文本框中检索值。问题是如果我声明这样的变量:变量声明问题

var bdmm = $("#bdmm").val(); 
中的document.ready事件,而是一个功能外

,并在函数引用它,文本值是零。但是,如果我在函数中声明它,它工作正常。这是为什么?

JQUERY:

这将工作:

$(document).ready(function() { 
     var bdmm = $("#bdmm").val(); 
     $('#submit').click(function(e){ 
       alert(bdmm); 
       e.preventDefault(); 
     }); 
    }); 

这将工作:

$(document).ready(function() { 
      $('#submit').click(function(e){ 
       alert($("#bdmm").val()); 
       e.preventDefault(); 

           //OR 
          var bdmm = $("#bdmm").val(); 
          alert(bdmm); 
       e.preventDefault(); 

      }); 
     }); 

回答

5

在第一个例子立即检索在DOM准备的文本框的值。如果它已经有一个值,它就会工作 - 但它不会re - 实际发生click事件时查询窗体。可能不是你想要的。

在第二个示例中,实际发生click事件时会检索表单字段值,这几乎可以肯定是您的意图。

+0

感谢您的回复。我现在知道了。那么如何在DOM上声明变量,并在函数中调用它呢?或者我应该这样做? – input

+1

@ fuz3d如果您在事件发生时关心它们的值,则不应该这样做。对于非动态的东西,他们不需要在DOM准备好的时候声明,尽管这是一种隔离变量名的方法,并且保证函数中会使用正确的值([JavaScript closures](http:// blog .morrisjohns.com/javascript_closures_for_dummies))。 –

+0

我明白了。谢谢。非常感激。 – input

1

问题是,可能只是在DOM准备好后,您的$("#bdmm").val()为空,并且当用户尝试提交表单时,它已具有一定的价值。

因此,回调外字段为空,则回调里面的字段已填写

另外,我建议使用jQuery's .submit()函数绑定表单提交而不是绑定到表单元素的点击事件(除非ID为“submit”的元素与表单的提交按钮不同)。这应该给你更多的灵活性,并应该通过点击“回车”按钮提交表单时也能工作。

1

您还可以创建全局变量(我喜欢它warap上课,但不会做这一次,以保持例子简单):

var MyGlobal; 

$("myTextBox").change(function(){ 
    MyGlobal = $(this).val(); 
}); 

那么你的代码工作得这么..一切看起来是这样的:

var bdmm; 
    $(document).ready(function() { 
      $("myTextBox").change(function(){ 
       bdmm = $(this).val(); 
      }); 

      $('#submit').click(function(e){ 
        alert(bdmm); 
      }); 
     }); 

当您编辑文本框时,该值将重新初始化。

http://api.jquery.com/change/