以下工作正常:
$(function() {
EnableDisableButtons();
$('#TextBox1').keyup(function() {
EnableDisableButtons();
});
});
function EnableDisableButtons() {
var len = $('#TextBox1').val().length;
if (len == 0) {
$("#Button1").attr("disabled", "disabled");
}
else {
$("#Button1").attr("disabled", "");
}
}
但以下内容根本不起作用:
var txt = $('#TextBox1');
$(function() {
EnableDisableButtons();
txt.keyup(function() {
EnableDisableButtons();
});
});
function EnableDisableButtons() {
var len = txt.val().length;
if (len == 0) {
$("#Button1").attr("disabled", "disabled");
}
else {
$("#Button1").attr("disabled", "");
}
}
它抛出的错误是“'txt.val()。length'为null或不是对象”。任何人都可以帮助我。
感谢
答案 0 :(得分:4)
var txt = $('#TextBox1');
这必须进入$()
调用中的函数。否则,您在DOM准备好之前尝试选择文本框。
答案 1 :(得分:3)
由于<script>
块位于<head>
标记中,因此在解析文档之前它正在执行。
因此,当您编写txt = $('#TextBox1')
时,文本框实际上还不存在。
要解决此问题,您需要在文档加载后设置txt
变量(在#(function() { ... })
内。
例如:
var txt;
$(function() {
txt = $('#TextBox1');
EnableDisableButtons();
txt.keyup(function() {
EnableDisableButtons();
});
});
TextBox1
看起来像ASP.Net服务器端控件
如果是这样,您应该将$('<%= TextBox1.ClientID %>
), since ASP.Net assigns its own unique IDs to server-side controls. Alternatively, in ASP.Net 4.0, you can add
ClientIDMode =“Static”替换为文本框。
此外,您应该为文本框指定一个有意义的名称。
答案 2 :(得分:1)
执行var txt = $('#TextBox1');
时,该元素尚不存在(DOM未完全加载)。
执行:
var txt;
$(function() {
text = $('#TextBox1');
EnableDisableButtons();
txt.keyup(function() {
EnableDisableButtons();
});
});
或将脚本放在HTML文档的末尾。
传递给$()
的函数在加载DOM时执行,即所有元素都存在。实际上,这样做的目的是确保您可以访问的所有元素都在那里。