如果选中复选框但相应的文本框为空则禁用按钮

时间:2013-10-16 12:25:54

标签: jquery

我有一个包含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');
            }
        } 
    });
}

1 个答案:

答案 0 :(得分:1)

请勿使用.attr(),请使用.prop()http://api.jquery.com/prop/

最好处理change事件,而不是clickkeyup事件,这可能发生在值实际更改之前。

此处如何执行此操作的示例:http://jsfiddle.net/EQkLB/