2016-08-25 6 views
0

複数のテキストフィールドを持つフォームがあり、必須フィールドが入力されたときに追加ボタンを有効にしたいと思います。 Firebugでは、ぼかし関数は起動しますが、if文には到達しません。特定のテキストフィールドに値があるときにボタンを有効にする

$(".cd-form :input").blur(function(){ 

    var ok=true; 
    $("#signup-firstnmame,#signup-surname","#signup-Address1","#signup-City","#signup-Postcode","#signup-Email","#signup-Mobile").each(function(){ 
     /* if ($(this).val()==="")*/ 


     if ($('#signup-firstnmame').val() !== "" && $('#signup-surname').val() !== "" && $('#signup-Address1').val() !== "" && $('#signup-City').val() !== "" && $('#signup-Postcode').val() !== "" && $('#signup-Email').val() !== "" && $('#signup-Mobile').val() !== "") 
     $("#AddData").prop("disabled",false); 

      else 
     $("#AddData").prop("disabled",true); 
    }); 

}); 
+0

セレクタがHTMLと一致していますか?私はそれにいくつかのタイプミスがあり、矛盾していることがあります。入力とともにHTMLを投稿してください。 – jalynn2

+0

私はif文がヒットしていることを確信しています。しかし、ifとelseへのconsole.logと、これらの入力のそれぞれの値もconsole.logに記録されます。また、$(これ)を使用しない場合は、それぞれを使用する必要はありません。あなたは完全に私が信じているifを削除するか、その膨大なif文の代わりに$(this)を使って値をチェックすることができます。 – Goose

+0

セレクタのすべてが単一の文字列内にあるべきではありませんか? – jalynn2

答えて

1

カンマは、セレクタの一部であり、別々のパラメータではないと考えられます。

$('#signup-firstname, #signup-surname, #signup-Address1, ... 

また、あなたはすべてのフィールドをチェックしている場合は、あなたのif文のように、あなたはそれが一度それを行うには十分だろう、フィールドごとに一度それをする必要はありません。

あなたは、関連するフィールドにクラスを追加することを検討したい場合は、あなたの関数をはるかに読みやすいだろう、すなわち:

$('#AddData').prop('disabled', $('.required-field[val=""]').length > 0); 
0

起動するには、私は入力に独自のクラスを追加するために、スマートだと思いますあなたが気にしていること。

$('.yourClass').on('input', function() { 
    var x = true; 
    $('.yourClass').each(function() { 
    this = $(this); //cast it to jQuery obj (ez ref) 
    if (this.val() == "") 
      x = false; 
    }); 
}); 

基本的に、誰かがフィールドに何かを入力するたびに、jQueryのは、あなたの入力値をチェックし、Xに1を加算を反復します:この方法は、あなたの線に沿って何かを行うことができます。 xがチェックしている要素の数と等しい場合は、ボタンを有効にします。

これはもっとも洗練された解決策ではありませんが、私はプロジェクトを終了するときにあなたが抱えていたのと同じ問題をどうやって解決しましたか?

@JaredTがブーリアンについて言及したもので私の答えを変更しました。私はこれが更に改善されると確信しています、しかし、これがボールの転がりを願っています。

関連する問題