2017-12-28 51 views
0

にオートコンプリートのパスワードで繰り返し複数回呼び出さぼかし機能は、私は繰り返し、ページの読み込みに自分自身と呼ばれているjQueryのでボケ関数以下のいるブラウザで

クローム(すべてのブラウザでは。):バージョン63.0.3239.84
Firefox:バージョン57.0.2

以下はjQueryコードです。

$(document).on('blur','#signInFormId input[name=email],#formId input[name=email]',function(e){ 
     var formData  = {}; 
     formData.email = email; 
     $.ajax({ 
      method:'POST', 
      url: AJAX_URL, 
      dataType:'json', 
      data:formData, 
      success:function(response){ 
       console.log(response); 
      } 
     });  
}); 

私は、以下のように、ログインとフォームをモーダルで持っています。
ログインフォーム:

<form id="signInFormId" > 
    <div class="email"> 
     <div class="header">Email Address</div> 
     <input type="email" name="signIn_email" id="signIn_email" placeholder="Email Address" value="" autofocus />  
    </div> 
    <div class="container"> 
     <div class="header">Password</div> 
     <input type="password" name="signIn_password" autocomplete="new-password" id="signIn_password" placeholder="Password" />   
    </div> 
</form> 

登録フォーム:

<form id="formId" action="javascript:void(0);"> 
    <div class="first-name"> 
     <div class="header">First Name</div> 
     <input type="text" id="first_name" name="first_name" placeholder="" value=""/> 

    </div> 
    <div class="last-name"> 
     <div class="header">Last Name</div> 
     <input type="text" id="last_name" name="last_name" placeholder="" value=""/>      
    </div> 
    <div class="container"> 
     <div class="header">Email Address</div> 
     <input type="email" id="email_signup" name="email" placeholder="" value=""/>   
    </div> 
    <div class="container"> 
     <div class="header">Password</div> 
     <input type="password" id="password" name="password" placeholder="password" value="" />       
    </div> 
    <a onclick="registerFunction()" href="javascript:void(0);"><div class="button">Signup</div></a> 

</form> 

以下は、私が試してみましたし、問題が再現可能である場合があります。

  1. ログインフォームからオートフォーカスを削除しました。
  2. ブラーまたはフォーカスイベントをトリガーできるすべての機能がチェックされています(存在しない)。
  3. 上記のぼかし機能以外のすべてのコードをjQueryから削除し、両方のフォーム(ログインとサインアップ)をページに保存しました。
  4. ログインフォームからautocomplete = "new-password"を削除し、登録フォームに追加しました。
  5. 入力ids(email_signup、signIn_email)を使用して#signInFormId input [name = email]、#formId input [name = email]を変更しました。
  6. e.preventDefault()を使用して試行しました。
  7. 削除されたjavascript:void(0);フォームアクションから。

以下の場合、問題は再現できません。ブラウザまたは追加されたオートコンプリート=」新しいパスワード」

障害者オートコンプリート(注:オートコンプリート=」オフ」またはfalseは、ブラウザによって無視 です)。

しかし、私はフォームのオートコンプリートをオフにしたくありません。

オートコンプリートで複数のぼかしイベントをトリガーする方法をお勧めしますか?

+0

を - あなたは無限に意味ですか?再帰的に?または入力ごとに1回ですか? (後で述べる) "複数のブラーイベントを止めたい"場合は、* debounce *を使うだけです。 –

+0

はい、無限に呼び出されます。 – shafiq

答えて

0

あなたは、複数のにじみを防止するためにブール追加することができます。* *「繰り返し自体いわゆる」

var isBlur= false; 
$(document).on('blur','#signInFormId input[name=email],#formId input[name=email]',function(e){ 
    if(!isBlur){ 
     isBlur = true; 
     var formData  = {}; 
     formData.email = email; 
     $.ajax({ 
      method:'POST', 
      url: AJAX_URL, 
      dataType:'json', 
      data:formData, 
      success:function(response){ 
       console.log(response); 
      } 
     }); 
    } 
}); 
+0

既に試しました。これにより、ぼかし機能は1回だけ許可されます。ユーザーが新しいメールを入力するとき。うまくいかないだろう。そのケースを処理するために、私は新しいjQuery関数を書く必要があります。 – shafiq

+0

あなたは 'success:'関数の中で 'isBlur = false'を再設定します –

+0

それは再びループに入ります:) – shafiq

関連する問題