变量声明问题

时间:2011-10-30 19:58:19

标签: jquery

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

var bdmm = $("#bdmm").val();

在document.ready事件中但在函数外部,并在函数中引用它,文本值为null。但是,如果我在函数内声明它,它工作正常。为什么会这样?

JQUERY:

这将 NOT 工作:

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

            });
        });

3 个答案:

答案 0 :(得分:5)

在第一个示例中,它会立即在DOM ready上检索文本框值。如果其中已有值,则它将起作用 - 但是当click事件实际发生时,它不会重新 - 查询表单。可能不是你想要的。

在第二个示例中,当click事件实际发生时,将检索表单字段值,这几乎肯定是您想要的。

答案 1 :(得分:1)

问题是,可能就在DOM准备就绪后,您的$("#bdmm").val()为空,当用户尝试提交表单时,它已经有了一些价值。

因此,在回调之外字段为空,在回调中该字段已经填写

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

答案 2 :(得分:1)

你也可以创建全局变量(我更喜欢将它改为类,但这次不会这样做以保持示例简单):

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/