2016-09-13 12 views
2

私はjqueryで継続的なEnterキーを押す必要があります。これは可能ですか?ここでjqueryを使用して複数回Enterキーを押さないようにするにはどうすればいいですか?

$('#password-input').keyup(function(e) { 
    if (e.which == 13) { 
     alert("Enter key") 
    } 
}); 

私はを押していた場合は、キー以上の時間が、私は2回のアラートを取得しています意味ENTER。しかし、私は1回だけ取得する必要があります。

私を助けてください!

+1

:)) – madalinivascu

答えて

0

表示アラートの遅延時間を設定する状態

var pressed = false; 
$('#password-input').keyup(function(e) { 
    if (!pressed) { 
     if (e.which == 13) { 
      pressed = true; 
      alert('Enter key'); 
     } 
    } 
}); 
0

使用.setTimeout()を格納する変数を使用します。遅延時間でEnterキーをもう一度押すと、以前のタイムアウトを削除して新しいタイムアウトを設定します。タイムアウトの最後にアラートを表示します。

var interval; 
 
$('#password-input').keyup(function (e) { 
 
    if (e.which == 13) { 
 
     clearInterval(interval); 
 
     interval = setTimeout(function(){ 
 
      alert("Enter key") 
 
     }, 500); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input id="password-input" />

あなたのカスタム時間に遅れの時間を変更することができます。

3

あなたはkeyupイベントをバインドするjQuery#bindを使用して、エンドユーザーPRESは「キーを入力し、」複数回を防ぐために「キーを入力します」ときjQuery#unbindkeyupイベントをバインド解除よりもすることができます

var $passwordInput = $('#password-input'); 
 

 
$passwordInput.bind('keyup', function(e) { 
 
    passwordInputKeyupHandler(e); 
 
}); 
 

 
function passwordInputKeyupHandler(e) { 
 
    if (e.which === 13) { 
 
    console.log('Enter key!'); 
 
    $passwordInput.unbind('keyup'); 
 

 
    return setTimeout(function(){ 
 
     console.log('Rebind keyup event'); 
 
     $passwordInput.keyup(passwordInputKeyupHandler); 
 
    }, 2000); 
 
    } 
 

 
    console.log('Any other key...'); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<input id="password-input" type="password">
コメントの @doradoによって指摘されているように持っているエンドユーザーを避けるために、 setTimeout()を使用して、2秒後に「再バインド」を作ったこと は

注意ページをリロードするには

+2

あなたも 'setTimeout'を使用して、数秒後に「再バインド」することができます。 – dorado

+0

私は完全に同意しています。エンドユーザーがページのリロードをしなくて済むようにするためには、ほとんどのことが行われます。 –

+1

私はイベントハンドラ関数内でイベントトリガを結びました。 Enterキーが押されたときに私の 'input'をアンバインドして、ajax呼び出しをトリガーし、ajax呼び出しが完了したら、' input'を 'keyup'に再バインドします。 Ajax呼び出しが完了したので、私は不自然に 'keyup'を再バインドしないようにします(これは最初にすべてをやるという目的を破ります)。 –

1

ステートを格納するために変数を使用する以外にも、数ミリ秒が経過しても再度Enterキーを押すとアラートが表示されることがあります。これはsetTimeoutによって達成することができます。たとえば、Enterキーは2000msの間隔の後に押された場合にのみ再検出されます。同時に1時間以上

var pressed = false; 
$('#input-element').keyup(function(e) { 
    if (!pressed) { 
     if (e.which == 13) { 
      pressed = true; 
      alert('Enter pressed.'); 
      i = setTimeout(function() { 
       pressed = false; 
      }, 2000); 

     } 
    } 
}); 
+0

その良い仕事。私はこの問題に多くの時間を費やしています。そんなに大変ありがとうございます。 –

+0

if文を 'if(!pressed && e.which === 13){...}'に減らすことができます。また、未定義の 'i'変数に' setTimeout() 'を割り当てる必要がないことに気づくでしょう。 –

+0

あなたは大体@GokulKumarです。 :) – dorado

0
var pressed = false; 
    $('#password-input').on('keyup',function(e) { 
     if (e.which == 13 && !pressed) { 
      pressed = true; 
      alert("Enter key"); 
     } 
    }); 
+1

詳細を編集してください。コード専用と「試してください」の回答は、検索可能なコンテンツが含まれていないため、推奨されません。なぜ誰かが「これを試してみる」べき理由を説明しません。 – abarisone

関連する問題