2016-12-20 5 views
0

私は初めてのポスターと初心者プログラマーです。私はここにIIFEの外で動作するいくつかのコードを持っていますが、私がそれを1つに入れると、submit関数が中断されます。私がやっていることは、すべてのフィールドが少なくとも1文字あるまで、送信ボタンを無効にした単純な連絡フォームを作成することです。この時点で、Javascript/jQueryのコードを再構築して動作させることはできませんでした。私はこれに簡単な答えがあると確信しています、私はまだそれを見ていないだけです。ありがとうございました!送信ボタンがIIFEを使用して再度有効にならない

はJavaScript

(function() { 

    function init() { 
     window.onload = checkform; 
    } 

    function checkform() { 

     var validateBeforeSubmit = document.forms["contactForm"].elements; 
     var cansubmit = true; 

     for (var i = 0; i < validateBeforeSubmit.length; i++) { 
      if (validateBeforeSubmit[i].value.length == 0) 
       cansubmit = false; 
     } 
     document.getElementById('submitButton').disabled = !cansubmit; 
    } 
    init(); 
})(); 

答えて

1
(function() { 
function init() { 
window.onload = checkform; 
} 
function checkform() { 
var validateBeforeSubmit = document.forms["contactForm"].elements; 
var cansubmit = true; 
for (var i = 0; i < validateBeforeSubmit.length; i++) { 
     if (validateBeforeSubmit[i].value.length == 0) cansubmit = false; 
     validateBeforeSubmit[i].oninput=checkform;//the line you need 
}  
document.getElementById('submitButton').disabled = !cansubmit; 
} 
init(); 
})(); 

:、右

+0

これは、すべてのフィールドを入力して最後に入力したフィールドをクリックすると問題を解決しました。最初にそれをクリックしていないフィールドの文字ですか? – serial10

+0

はい、onchangeの代わりにoninputを使用してください... –

+0

完璧、ありがとう! – serial10

1

あなたはのonloadイベントにごcheckform機能を割り当てています。ページが読み込まれるときに一度だけ実行されます。

あなたはそれを別のものにマップする必要があります。 おそらく入力変更ですか?

0

あなたはcheckload関数にonloadイベントをバインドしていますが、誰がonloadイベントをトリガーしますか?ブラウザはすでにこのイベントをトリガしているので、明らかに関数が呼び出されることはありません。

私はあなたが前にこのようなSTHを持っていたと思います
+0

...その今だけの閉鎖を介して結合して、これはもうグローバルスコープでcheckformありえないので、もう動作wouldntの

<input onchange="checkform"> 

だから私は、すべてのフィールドをチェックするために何かを再度呼び出す必要があります、正しい? – serial10

+0

Kiransのステートメントはおそらく間違っています。 iifeは非常に速く実行されるので、起動する前にonloadをバインドする必要があります。 –

関連する問題