2016-11-13 6 views
0

にN回をクリックした後、N回現れます)、アラートボックスは1回だけ表示されます。 Registerを再度押すと、アラートボックスが2回表示されます。どうしたの?警告ボックスは、この機能を考えると、ボタンを提出

required属性がSafariで機能しないため、カスタムJavaScript関数を使用してフォームの検証を行っています。

ありがとうございます。

+0

ボタンを初めてクリックすると無効にすることができます。 – Deep

+0

できません。目標は、 'required'要素が設定されていない場合に警告メッセージを表示することです。ワンクリック後に送信ボタンを無効にすると、ページをリロードしない限りユーザーはそれ以上クリックできなくなります。 – sgrontflix

答えて

0

あなたのヒットサブミットボタン、つまりvalidateが機能するたびに、いつでもイベントリスナーを送信してください。これを処理するには2つの方法があります。登録するには、一度だけ登録するか、追加したリスナーを最初に削除して追加します。

最初の方法

function validate() { 
    var elements = ["firstname", "lastname", "password", "favfood", "favsport"]; 

    document.getElementById('register').noValidate = true; 
    document.getElementById('register').addEventListener('submit', function(event) { 
     for (var i = 0; i < elements.length; i++) { 
     if(document.getElementById(elements[i]).hasAttribute("required")) { 
      if(!document.getElementById(elements[i]).checkValidity()) { 
       event.preventDefault(); 
       alert('Please, fill in every required field of the form.'); 
       break; 
      } 
     } 
     } 
    }, false); 
} 

validate(); // call this function directly and remove it from your submit button 

第二の方法

function validateCallback(event) { 
    var elements = ["firstname", "lastname", "password", "favfood", "favsport"]; 

    for (var i = 0; i < elements.length; i++) { 
    if(document.getElementById(elements[i]).hasAttribute("required")) { 
     if(!document.getElementById(elements[i]).checkValidity()) { 
      event.preventDefault(); 
      alert('Please, fill in every required field of the form.'); 
      break; 
     } 
    } 
    } 
} 

function validate() { 
    document.getElementById('register').noValidate = true; 
    document.getElementById('register').removeEventListener('submit', validateCallback, false); 
    document.getElementById('register').addEventListener('submit', validateCallback, false); 
} 

、あなたが現在使用しているのと同じそれを使用しています。

+0

編集:私はばかだ。私はあなたの例を正しくコピーしませんでした。すべてが魅力のように機能します。ありがとうございました。 – sgrontflix

0

validateメソッドの中で、毎回送信ボタンに新しいイベントリスナーを追加するため、アラートが増えています。

+0

ありがとうございます。私はupvoted :) – sgrontflix

関連する問題