我有一个功能,应该检查输入:文字是否有值或是否选中复选框。如果没有,那么弹出出现。它仅适用于已选中/未选中的输入,而不适用于输入:文本。我在这做错了什么:
$("#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;
}
});
答案 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;