2012-05-11 16 views
0

重いワンサイズのすべてのプラグインに頼ることなく、独自の基本フォーム検証を作成しようとしています。次のコードを記述しました。どのくらいの頻度で書き直してやり直しても問題ないようですが、それを動作させることはできません。Jquery基本フォームの検証

考えられるのは、スクリプトがフォームをチェックしてすべてのフィールドが完了しているかどうかを確認し、そうであれば送信ボタンから無効な属性を削除します。

機能: -

function checkForm(){ 
$('#contact :input').each(function(){ 
    if($(this).attr('value') == null){ 
    var checked = false; 
    } else { 
    var checked = true; 
    } 
}) 
if (checked == true){ 
    alert('all filled in'); 
    //remove disabled attribute from button 
} else { 
    alert('not completed'); 
    //add disabled attribute to button 
} 

} 

と機能を呼び出すコード: -

$('#contact :input').blur(function(){ 
    if ($(this).val() <= ''){ 
     $(this).next('.error').show(); 
    } else { 
     $(this).next('.error').hide(); 
     checkForm(); 
    } 
}) 

私は一日これでぐちゃぐちゃしてきたし、Google経由で答えを見つけるのに苦労しています。

+1

あなたがもし($(この).val()<= ''){ ' – TRR

答えて

1
function checkForm(){ 
    var checked = true; 
    $('#contact :input').each(function(){ 
    if(!$.trim($(this).val()).length) checked = false; 
    }) 
    if (checked){ 
    alert('all filled in'); 
    //remove disabled attribute from button 
    } else { 
    alert('not completed'); 
    //add disabled attribute to button 
    } 
} 

AND関数を呼び出すための

$('#contact :input').on('blur', function(){ 
    if (!$.trim($(this).val()).length){ 
     $(this).next('.error').show(); 
    } else { 
     $(this).next('.error').hide(); 
     checkForm(); 
    } 
}) 
+0

これを行うには、私は 'これを(チェックしてください)'以前に行っています:) - この例は、私が必要なことをしているようです - コードをカットしていただきありがとうございます。 – Andrew

0

あなたはこのためにjquery.validate()関数を使用することができますし、その参照URLは次のとおりです。http://docs.jquery.com/Plugins/Validation

+0

もし'比較されている方法に問題があるかもしれません私は何も学んでいないだろう:) – Andrew

0

補正:

function checkForm(){ 
$('#contact :input').each(function(){ 
if($(this).val() == ''){ 
    var checked = false; 
    } else { 
var checked = true; 
} 
}) 
if (checked == true){ 
alert('all filled in'); 
//remove disabled attribute from button 
} else { 
alert('not completed'); 
//add disabled attribute to button 
} 

} 

$('#contact :input').blur(function(){ 
if ($(this).val() == ''){ 
    $(this).next('.error').show(); 
} else { 
    $(this).next('.error').hide(); 
    checkForm(); 
} 
}) 
+0

答えをありがとう - 私は前にこのアプローチを試したと確信していますが、私はもう一度それを試しました、そして、それはまだfunction – Andrew

+0

次に、$(this).val()に警告を追加して、取得している値と取得したい値を確認してください。 – Rizstien

+0

あなたが 'checked'フィールドの値を確認してください。 – TRR

1

あなたは "を作成しているので、 .each()の匿名関数の中で変数 'c​​hecked'が使用されている場合、チェックされた変数はif(checked == true)のテストのためにその関数の外部では使用できません( 'checked is undefined'あなたのアラートが発砲していないのはこのためです。

まず、匿名関数の外で 'checked'変数を定義し、それに応じてそれを更新してみてください。

function checkForm() { 

    var checked = true; 

    $('#contact :input').each(function() { 
     if ($(this).val() == '') { 
      checked = false; 
     } 
    }) 

    if (checked == true) { 
     alert('all filled in'); 
     //remove disabled attribute from button 
    } else { 
     alert('not completed'); 
     //add disabled attribute to button 
    } 

} 

$('#contact :input').blur(function() { 
    if ($(this).val() == '') { 
     $(this).next('.error').show(); 
    } else { 
     $(this).next('.error').hide(); 
     checkForm(); 
    } 
}) 

ここにjsFiddleの例があります。 http://jsfiddle.net/DMLzK/1/

+0

私はなぜそれが失敗したのか分かります。 – Andrew