【问题标题】:Check if all inputs are empty (have no value)检查所有输入是否为空(没有值)
【发布时间】:2016-07-30 11:32:16
【问题描述】:

我只是想快速拼凑一些东西,检查我的表单中的任何输入是否为空。
我正在尝试这个:

var isEmpty = true;
$('input').each(function(){
    if($(this).val() === ""){
        isEmpty = false;
    }
});
alert(isEmpty);

但它一直在提醒 true
如果我这样做:

$('input').each(function(){
    alert($(this).val();
});

它会提醒我拥有的每个输入字段...
如果我有一个空输入,为什么它不返回 false?

【问题讨论】:

    标签: javascript jquery return each


    【解决方案1】:

    这里有一个小 sn-p 来检查你所有的 text inputs 是否为空:

    var isEmpty = $("input[type='text']").filter(function () {
        return this.value.trim();
    }).length === 0;
    
    console.log( isEmpty );   // boolean true/false
    

    jsBin playground

    P.S:checkboxradio 游戏更简单:

    var isUnchecked      = $("input[type='checkbox']:checked").length === 0;
    var isRadioUnchecked = $("input[type='radio']:checked").length === 0;
    

    奖励::blank 自定义选择器(适用于任何元素)

    jQuery.extend(jQuery.expr[':'], {
      blank: function(e,i,m) {
        if(/input|textarea/i.test(e.tagName)) {
          if(/checkbox|radio/i.test(e.type)){
            return !e.checked;
          }else{
            return !e.value.length;
          }
        }else{
          return !e.innerHTML.trim();
        }
      }
    });
    
    
    $("div:blank").css({outline:"2px solid red"});
    $("input:blank").css({outline:"2px solid red"});
    $("textarea:blank").css({outline:"2px solid red"});
       
    $("div:not(:blank)").css({outline:"2px solid green"}); // how cool is that? Using :not
    *{margin:5px;padding:2px;}
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
    <div></div>
    <div>Example using :not(:blank) selectors</div>
      
    <input type="text" value="abc">
    <input type="text" value="">
      
    <input type="checkbox">
    <input type="checkbox" checked>
      
    <input type="radio" checked>
    <input type="radio">
      
    <textarea></textarea>
    <textarea>abc</textarea>

    &lt;div&gt;&lt;p&gt; 等标准元素上,:blank 的行为与 jQuery 的 :empty 选择器不同,请注意空格和换行符:

     <p>
    
     </p>
    

    并查看结果:

    $("p:blank").length // 1 (found one blank paragraph)
    $("p:empty").length // 0 there's no empty paragraph (since the newlines/spaces)
    

    回到你的问题 :)

    由于您循环所有元素,目前您只需将isEmpty 的值设置为循环中的最后一个元素 - 值。
    您可以将您的布尔标志声明到 if 中,例如:

    var isEmpty = false; // start with a falsy presumption
    $('input').each(function(){
        // as long as `isEmpty` is `false`
        if(isEmpty===false && $.trim( this.value ) === "") {
            isEmpty = true;
        }
    });
    

    另外,检查 emptiness 执行 === "" 更有意义返回 true

    否则反过来就是反转你的否定

    var isEmpty = true; // start with a truthy presumption
    $('input').each(function(){
        if(isEmpty && $.trim( this.value )){
            isEmpty = false;
        }
    });
    

    这是一个活生生的例子:

    var isEmpty = true; // start with a truthy presumption
    $('input').each(function(){
        if(isEmpty && $.trim( this.value )){
            isEmpty = false;
        }
    });
    
    alert(isEmpty); // false
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <input type="text" value="">
    <input type="text" value="something">
    <input type="text" value="">

    【讨论】:

    • 那是我的错,我解决了这个问题。我的代码中确实有 .val()。
    • @Kalkrin 已编辑。然而仍然未经测试,但希望它是有意义的。
    • 我已经成功了,感谢您的意见和建议。
    【解决方案2】:

    alert 在循环之外,所以它只会提醒最终值。希望下面的代码有用

    HTML

    <input type="text" id=" " value="rdrdr"/>
    <input type="text" id=" " value=" "/>
    <input type="text" id=" " value="xdxd"/>
    <input type="text" id=" " value=" "/>
    

    JS

    $('input').each(function(){
        var isEmpty = true;
        if($.trim($(this).val()) == ""){
            isEmpty = false;
        }
        console.log(isEmpty)
    });
    

    Chexk here for demo

    【讨论】:

      【解决方案3】:

      在您的代码中,您正在检查:

      if($(this) === "")
      

      $(this) 是一个jQuery 对象,它永远不会与空字符串相同。也许你打算写这个?

      if ($(this).val() === "")
      

      【讨论】:

      • 那是我的错,我解决了这个问题。我的代码中确实有 .val()。
      【解决方案4】:

      您需要检查每个输入的 val(),因此请记住获取要比较的值:

      if ( $(this).val() === "" )
      

      【讨论】:

        【解决方案5】:

        尝试先初始化变量,不包含任何值。然后在一定范围内放置一个值并调用它。

        var isEmpty;
            $('input').each(function(){
              if($(this) === ""){
                var isEmpty = false;
                return isEmpty;
                alert(isEmpty);
              } else {
                var isEmpty = true;
                return isEmpty;
                alert(isEmpty);
              }
            });
        

        【讨论】:

          猜你喜欢
          • 2015-01-11
          • 2020-09-16
          • 2012-02-06
          • 2012-05-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-26
          相关资源
          最近更新 更多