我有一个包含4列的表和一个提交按钮。像这样:
FOOD YES NO REASON
pizza cb cb tb
fries cb cb tb
curry cb cb tb
noodle cb cb tb
[SUBMIT]
如果选中任何No框但其相应的文本框为空,我需要禁用该按钮。 我有一点工作。如果你按顺序浏览每一个,那很好。所以你对披萨说“是”,按钮仍然启用。您将其更改为否,该按钮被禁用。您提供原因并再次启用该按钮。清除文本框,再次禁用该按钮。您将更改回“是”并启用该按钮。然后你做同样的薯条,一切都很好。等
但是,如果您为所有这些选择“否”并提供所有这些的原因(因此启用了按钮),但随后清空了比萨饼的文本框,则按钮不会像它应该那样被禁用。但是,如果你清理面条,那么就可以了。
我一直试图做的是每次点击一个复选框或在Reason列中的keyup上循环遍历表,但我对jQuery很新,并且真的不知道如何做到这一点。任何人都可以帮忙吗?
感谢。
代码:
$('input[type=checkbox]').click(function(){
checkReasons();
}
$('input[type=text]').keyup(function(){
checkReasons();
});
function checkReasons(){
$('#mytable tr:not(:first)').each(function(){
var cb = $(this).find('td:nth-child(3) input[type=checkbox]');
var tb = $(this).find('td:nth-child(4) input[type=text]').val();
if (cb.is(':checked')){
if (tb.length == 0){
$('#button').attr('disabled','disabled');
} else {
$('#button').removeAttr('disabled','disabled');
}
}
});
}
答案 0 :(得分:1)
请勿使用.attr()
,请使用.prop()
。 http://api.jquery.com/prop/
最好处理change
事件,而不是click
或keyup
事件,这可能发生在值实际更改之前。
此处如何执行此操作的示例:http://jsfiddle.net/EQkLB/