2017-01-27 4 views
0

フォーム入力がすべて空であるかどうかを確認しようとしています。どの入力にも値がある場合(trueを返す)はうまく動作しますが、入力が再び空になった場合はfalseを返しません。すぐに1つのフィールドがあるとして、あなたが= &の有無をチェックしている、と -Javascript - シリアル化されたフォームが空であるかどうか確認してください。

var data; 
 

 
$('form :input').on('input', function() { 
 
    data = $('form').serialize(); 
 
    console.log(data.indexOf('=&') > -1) 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form> 
 
    <input type="text" name="in-1" /> 
 
    <input type="text" name="in-2" /> 
 
    <input type="text" name="in-3" /> 
 
    <input type="text" name="in-4" /> 
 
    <input type="text" name="in-5" /> 
 
    <input type="text" name="in-6" /> 
 
    <input type="text" name="in-7" /> 
 
    <input type="text" name="in-8" /> 
 
</form>

答えて

2
(data.indexOf('=&') > -1 

は、フィールドの少なくとも1が空白の場合にtrueを返します空白の場合、この文字列が存在します。しかし、データのシリアル化されたバージョンに依存することは、とにかくIMHOのビットです。入力を直接チェックする方がはるかに良い:

$('form :input').on('input', function() { 
    var allBlank = true; //assume they're all blank until we discover otherwise 
    //loop through each of the inputs matched 
    $('form :input').each(function(index, el) 
    { 
    if ($(el).val().length != 0) allBlank = false; //they're not all blank anymore 
    }); 
    console.log(allBlank); 
}); 
+0

おかげで、理にかなっています。 – g5wx

0

var serialized = $(form).serialize();

if(serialized.indexOf('=&') > -1 || serialized.substr(serialized.length - 1) == '='){ 
    //you've got empty values 
} 

のjQueryを使用して、あなたがシリアライズする前にそれをテストすることができます。

$(form).find('input').each(function(idx, elem){ 
    if($(elem).val().length == 0){ 
     //this field is empty 
    } 
}); 
0
data.split('&').every(e => { return e.indexOf('=') === (e.length - 1); }) 
関連する問題