使用 jQuery 检查所有表单输入是不是为空

Posted

技术标签:

【中文标题】使用 jQuery 检查所有表单输入是不是为空【英文标题】:Checking if ALL form inputs are empty with jQuery使用 jQuery 检查所有表单输入是否为空 【发布时间】:2012-05-18 00:58:34 【问题描述】:

我正在尝试验证联系表单,并且我想在填写完每个输入字段后创建某种“表单已完成”消息(一些输入是文本框,一些是单选按钮)。

到目前为止,这是我的代码:

$(document).ready(function() 
  $('.form:input').each(function() 
    if ($(this).val() != "") 
      $('.congrats').css("display", "block");
    
  );
);
p.congrats 
  display: none;
<div class="form">
  <input type="text" />
  <br />
  <input type="text" />
</div>
<p class="congrats">Congrats!</p>

http://jsfiddle.net/7huEr/

【问题讨论】:

【参考方案1】:

这应该让你开始:

$(document).ready(function() 
    $(".form > :input").keyup(function() 
        var $emptyFields = $('.form :input').filter(function() 
            return $.trim(this.value) === "";
        );

        if (!$emptyFields.length) 
            console.log("form has been filled");
        
    );
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="form">
    <input type="text" /><br />
    <input type="text" />
</div>
<p class="congrats"></p>

【讨论】:

在每个 keyup 事件上执行$('.form :input') 并不是最优的。我肯定会缓存那个 jQuery 对象:var $fields = $( ':input', '.form' ); @ŠimeVidas - 是的,我虽然有人会指出这一点。好的,我会解决的:) 当然,$(document).ready(fn); 是历史。我们现在正在做$(fn); @ŠimeVidas - 也是如此,但我仍然喜欢稍微冗长和老式的版本。 如果浏览器缓存并预填充表单上的值,这会起作用吗?它正在寻找keyup...【参考方案2】:

试试这个:

$("#a").on('click',function () 
var bad=0;
 $('.form :text').each(function() 
        if( $.trim($(this).val()) == "" ) bad++; 
            
          
    );
    
    if (bad>0) $('.congrats').css("display","block").text(bad+' missing'); 
    else $('.congrats').hide(); 
);



 
   
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="form">
    <input type="text" /><br />
    <input type="text" />
</div>
<p class="congrats"></p><input style="width:100px" value="check" id="a" type="button" />

【讨论】:

【参考方案3】:

这个使用了jQuery的serializeArray函数,所以你不必担心检查不同类型的字段或者什么是空字段:

$.fn.isBlank = function() 
    var fields = $(this).serializeArray();

    for (var i = 0; i < fields.length; i++) 
        if (fields[i].value) 
            return false;
        
    

    return true;
;

【讨论】:

为了让它工作,我需要使用 if (fields[i].value != '')【参考方案4】:

$('#check').click(function () 
    var allFilled = true;
    
    $(':input:not(:button)').each(function(index, element) 
        if (element.value === '') 
            allFilled = false;
        
    );
    
    console.log(allFilled);
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="form">
    <input type="text" /><br />
    <input type="text" />
</div>
<p class="congrats"></p>
<input type="button" id="check" value="check" />

【讨论】:

【参考方案5】:

jsFiddle:http://jsfiddle.net/7huEr/38/

$(document).ready( function()

    // Iterate over each input element in the div
    $('.form input').each(function()
    
        // Add event for when the input looses focus ( ie: was updated )
        $(this).blur( function()
        
            // Variable if all inputs are valid
            var complete = true;

            // Iterate over each input element in div again
            $('.form input').each(function()
            
                // If the input is not valid
                if ( !$(this).val() )
                
                    // Set variable to not valid
                    complete = false;
                
            );

            // If all variables are valid
            if ( complete == true )
            
                // Show said congrats
                $('.congrats').show();
            
        );
    );
);​

【讨论】:

【参考方案6】:

现代香草解决方案:

// Returns True if all inputs are not empty
Array.from(document.querySelectorAll('#myform input')).every(
    function(el)return el.value;
)

【讨论】:

以上是关于使用 jQuery 检查所有表单输入是不是为空的主要内容,如果未能解决你的问题,请参考以下文章

如何在jquery中检查输入类型号是不是为空[重复]

如何检查数字输入是不是为空?

检查表单输入是不是为空,如果不是,则在按下提交按钮时显示隐藏的 div

AngularJS - 表单自定义验证 - 检查至少一个输入是不是为空

jquery验证表单是不是为空

如何检查 jQuery datepicker 是不是为空?