如果选中或输入复选框:文本有值

时间:2017-01-26 19:40:32

标签: jquery validation checkbox input

我有一个功能,应该检查输入:文字是否有值或是否选中复选框。如果没有,那么弹出出现。它仅适用于已选中/未选中的输入,而不适用于输入:文本。我在这做错了什么:

$("#wcv-product-edit #save_button").click(function(){
    var checked = $("#shipping input:checked" ).length > 0;
    var text_value = $("#shipping input:text" ).length > 0;
    var store_checked = $("#store_shipping input:checked").length > 0;

    if (!checked && !store_checked || !text_value && !store_checked){
        $('#ship_wrong_popup').show();
        $('.page .wcv-tabs .tabs-nav li a.shipping').addClass('ship_highlight');
        return false;
    } else if (!checked && store_checked || !text_value && store_checked){
        // $('#ship_wrong_popup').show();  
        return true;
    } else if (checked && store_checked || text_value && store_checked){
        // $('#ship_wrong_popup').show();  
        return true;
    }
});

1 个答案:

答案 0 :(得分:1)

问题在于这一行:

var text_value = $("#shipping input:text" ).length > 0;

这是只选择"非空"文本框,它选择{em>任何输入type="text" ,无论它是否为空。只要#shipping中存在文本框,永远不会是0。

如果您只有一个文本框,请检查length而不是元素数:

var text_value = $("#shipping input:text" ).val().length > 0;

如果您有多个文本框并希望查看所有是否包含内容,则可以使用.filter过滤掉元素数中的空输入:

var text_value = $('#shipping input:text').filter(function () {
    return !!this.value;
}).length;