如何确定具有某个类名的可见元素是否为空?

时间:2015-02-26 21:04:20

标签: javascript jquery forms

起初我这样做,但后来我意识到这不起作用,因为并非所有元素都可见。我并不是说隐藏,我的意思是它甚至不会出现在DOM中。对于6个具有6个不同名称的字段,这整个代码块(减去document.ready部分)已完成6次,因此当输入6个字段中的任何一个时,检查另外5个。

$(document).ready(function() {
    $(document.body).on("input", "input[name='count1']", function() {
        if ($(this).val() == '') {
            //do nothing
        } else {
            var count1val = $("#count1").val();
            var count2val = $("#count2").val();
            var count3val = $("#count3").val();
            var count4val = $("#count4").val();
            var count5val = $("#count5").val();
            var count6val = $("#count6").val();
            if (count1val !== '' && count2val !== '' && count3val !== '' && count4val !== '' && count5val !== '' && count6val !== '') {
                //do something
            }
        }
    });
});

然后我需要查看具有某个类名的所有输入是否为空。需要使用类名,因为我需要以同样的方式处理多个集合,并且我不希望一个集合干扰其他集合。我尝试了以下但是没有用。

$(document).ready(function() {
    $(document.body).on("input", "input[name='count1']", function() {
        if ($(this).val() == '') {
            //do nothing
        } else {
            if ($(".countmulti:visible").val() !== '') {
                //do something
            }
        }
    });
});

有什么更好的方法可以找出具有特定类名的所有可见字段是否为空。

更好地解释可见区域;有时它只会显示字段1,有时是字段1和2,有时是1,2和3,有时是1,2,3和4,有时是1,2,3,4和5,有时全部是6。

我在stackoverflow上用另一个Q& A解决了它。这是我用过的:

var inputsWithNoValue = $(".countmulti:visible").filter(function() {
    return !this.value.length;
});
if (inputsWithNoValue.length) { // if there are inputs with no value
    alert('something empty');
} else {
    alert('nothing empty');
}

2 个答案:

答案 0 :(得分:0)

你试过console.log($(".countmulti:visible"))吗?它可能是一个数组。 它可能会返回许多元素,因此您必须使用每个来迭代数组。

答案是迭代它。 而不是:

  if ($(".countmulti:visible").val() !== '') {
        //do something
    }

var res = $(".countmulti:visible");
$.each(res, function( index, value ) {
  if ( res[index].val() !== '' ) //do something
});

问题是,给定的选择器返回许多对象而不是之前的对象。

答案 1 :(得分:0)

var inputsWithNoValue = $(".countmulti:visible").filter(function() {
    return !this.value.length;
});
if (inputsWithNoValue.length) { // if there are inputs with no value
    alert('something empty');
} else {
    alert('nothing empty');
}