2012-04-13 6 views
0

私は#$ @%のような禁止された文字がユーザーによって入力されたときに何かを警告するjQueryでフォーム検証を行っています。問題は、ユーザーがこれらの文字を入力すると、SHIFTキーを使用するため、2つのキーアップがあることです。jQueryで1秒間keyup()イベントをブロックするにはどうすればよいですか?

どのようにして2番目のイベントが発生するのを防ぐことができますか?

if (!regex.test(lastCharacter) 
    alert('forbidden character'); 

どうもありがとう

答えて

1

あなたが入力が変更されたときに発する入力イベントにバインドすることができますこれはIE9以降でのみサポートされています。その前に、入力値が変更されたときに発生するpropertychangeイベント(IEのみ)をバインドすることができます。以下の例は、ほとんどのブラウザでも動作し、IE9でコールバックを2回トリガーする可能性があるため、入力イベントのサポートを確認し、代わりにそれに応じて動作する必要があります。

http://jsfiddle.net/X4qNf/

ここでの私の悪い、それでのPropertyChangeを有するものである、それはあなたがそれを古いやり方を割り当てる必要があります動作しない場合は、IEで試してみてください。あなたの応答のための

$('#boo')[0].onpropertychange = function() {}; 

http://jsfiddle.net/X4qNf/2/

+0

こんにちは感謝。私はあなたの解決策をSafariとFireFoxで試しました。 onpropertychangeもIEと連携しますか?ありがとうございます – eric01

+0

私はこのボックスにIEとしてテストしていませんが、http://help.dottoro.com/larrqqck.phpが動作しなければならないと主張しています(そしてあなたの特別なケースをテストしたことはありません) – GillesC

+0

textInputイベントは実際には文字入力に特有のより良い候補(IE9から) – GillesC

1

これがうまくいくかどうかはわかりませんが、あなたのアイデアを得る:、

$("#myInput").keyup(function(e) { 
    if(e.which == 16) { 
     $(this).keyup(function(event) { 
      if(event.which==16) event.preventDefault(); 
     }); 

     setTimeout(function() { 
      $("#myInput").off('keyup'); 
     },1000); 
    } 
});​ 
関連する問題