2016-11-09 11 views
0

すべての必須フィールドが記入されていない場合、以下のコードはフォームの送信ボタンを無効にします。問題は、それが記入され、その後、ボタンが消去されたままになっている場合です。どうすれば修正できますか?必要なフィールドが入力されていないときにフォーム内のボタンを無効にする最善の方法

$(".submit").prop('disabled', true); 
$('.required').keyup(function() { 
    if ($(".fname").val() != "" && $(".lname").val() != "" && $(".userName").val() != "" && $(".familyRav").val() != "" && $(".birthday").val() != "" && $(".password").val() != '' && $(".confirm_password").val() != '' && $(".password").val() === $(".confirm_password").val()) { 
     $(".submit").prop("disabled", false); 

    } 
}); 
+0

無効にするよりも隠すだけです –

+5

'else $(" submit ")。prop(" disabled "、true);'? – j08691

+0

'ifValid'という変数を' if'条件と同じにし、disabledプロパティを '!isValid'に設定します。 –

答えて

1
は、IF/ELSEにあなたの場合を変更し

if ($(".fname").val() != "" && $(".lname").val() != "" && $(".userName").val() != "" && $(".familyRav").val() != "" && $(".birthday").val() != "" && $(".password").val() != '' && $(".confirm_password").val() != '' && $(".password").val() === $(".confirm_password").val()) { 
    $(".submit").prop("disabled", false); 
} else $(".submit").prop("disabled", true); 
0

ここでsubmitボタンが有効に得ることができる前にALL .required要素が満たされることを確認するための方法です。

機能は「特定の」フィールドのリストに依存しません。
.requiredクラスのみで十分です。

したがって、HTMLの管理が容易です。

$(".submit").prop('disabled', true); 

$('.required').keyup(function() { 

    // Each time a check is performed, consider the button disabled as a start. 
    $(".submit").prop('disabled', true); 


    // Set a var to use as a "flag". 
    var requiredAllCompleted = true; 

    // Cycle through them all. 
    $('.required').each(function(){ 
     if(($this).val() == ""){ 
      requiredAllCompleted = false; 
     } 
    }); 

    // If all required fields not empty 
    if (requiredAllCompleted){ 

     // Additional check for password match. 
     if($(".password").val() === $(".confirm_password").val()) { 

      // Unlock the submit button. 
      $(".submit").prop("disabled", false); 
     } 
    } 
}); 
+0

多分、キーアップイベントはちょっとオーバーキルです... '.on(" change "、function(){...'は十分なやり方でなければなりません...参照してください) –

+0

有効になっていませんか? –

+0

あなたのHTMLでクラスの変更を加えて、必要なすべてのフィールドに '.required 'クラスを追加しました。私は' '.password'と' '。confirm_passwordはまだ必要です。はい?これに関してあなたのボタンが有効にならないのは確かですか?もしそうなら、コンソールに何かエラーがありますか? –

0

必須のフィールドに最初のものが入力されたときに初めてフォームを無効にすることは意味がないので、デフォルトで無効にするボタンを変更する必要があります。

おそらく、この動作をさまざまなイベントで呼び出すことができる関数にカプセル化する必要があります。たとえば、フォームが事前入力されている場合、データの変更中にこの関数を呼び出すことに加えて、ページの読み込み時にこのチェックを実行して初期ボタンの状態を設定したいとします。

私はこれをキーアップではなく関連するフォームフィールドのイベントに変更することを考えます。キーアップは、ユーザーが入力している間に個々のフィールド検証のフィードバックを与えたい場合には拘束力がありますが、すべてのキープレスでボタンの有効/無効の状態を変更しようとすると本当に意味がありますか?

私はすでにあなたが簡単に対して選択した値を検証するために繰り返すことができ、必要なフィールドのために定義されたクラスが非空の文字列です持っている場合は、ここではハードコードのフィールド名に必要はありません@LouysPatriceBessetteの考えをエコーし​​ます

+1

"エコー"をありがとう...しかし、提供されたコードに基づいて、私はOPが彼の検証機能を "カプセル化"して、サイト全体のフォームにスケーラブルになるとは思っていません。彼にそれが可能であるという考えを与えることは、悪いことではないと考えられています。しかし、このカプセル化された関数はもっと複雑になります。それは確かに正規表現のような他の知識を含む分野 "トピックタイプ"に応じて多くのエラーメッセージを含んでいます..また、 "使用しやすい"妥当性検査プラグインが2つあります。 –

+1

@LouysPatriceBessetteここでのベスト・ベットは、多くの優れたjQuery検証拡張機能の1つを単純に使用することだと言います。 –

0

ここにはCSSのみのの解決策があります。常に我々はjavascriptのソリューションにジャンプする必要がありません:)

#frm1:invalid #btn1 { 
 
    pointer-events: none; 
 
    cursor: not-allowed; 
 
    color: graytext; 
 
}
<form id="frm1"> 
 
    name: <input name="n1" type="text" required="required" /><br /> 
 
    phone: <input name="n2" type="text" required="required" /><br /> 
 
    mail: <input name="n3" type="text" required="required" /><br /> 
 
    check: <input name="n4" type="checkbox" required="required" /><br /> 
 
    radio: <input name="n5" type="radio" required="required" /><br /> 
 
    <input id="btn1" type="submit" value="click" /> 
 
</form>

それは、もし誰かがフォーム内enterをヒットすることに注意することが重要だ - がないので、それは(送信されますCSSから送信ボタンの "無効"属性を制御する方法)。このソリューションは、スタイリング専用です。

pointer-eventsを使用して送信ボタンのクリックを無効にしました。

+0

私はこの新しい(私にとって)CSSセレクターに驚いています。私はこれがどのように私にとって役に立つのかを確認します。しかし、あなたが言いましたので、それは提出することにつながる[入力]を防ぐことはできません...現在のケースでは完全なものではありません。確かにチェックボックスやラジオでは非常に興味深いです。心に留めておいてください!共有してくれてありがとう。 –

+0

確かに:)あなたは大歓迎です! – Dekel

+0

それは確かにアップヴォートを負っている...私の個人的な知識のために、私のマウスはちょうどそれをやりたい!しかし、OPのために、私は確信していません。彼は明らかに彼はパスワードリピートマッチを望んでいると述べた。これはできません。 –

関連する問題