我有一个表单,我希望使用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();
});
});
答案 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);
});
});
编辑文本框时会重新初始化值。