2010-12-08 13 views
1

私は私のinputfieldsの一つにバックスペースを無効にしたいので、私は次のjQueryを書いた:jquery + ie8:バックスペースが検出されていませんか?

$("#noBackspacesHere").keypress(function(e){ 
      if(e.which == "8"){ 
       return false; 
      } 
     }); 

これはFirefoxで正常に動作しますが、IE8で動作するようには思えません。 私はすでに.keyCodeに問題があることを読んだので、私が行った理由です。

答えて

2

私は、キーボードイベントで遊んと​​は、ここであなたを助ける:

$("#noBackspacesHere").keydown(function(e) { 
    if (e.which == 8) { 
     return false; 
    } 
}); 

例:http://jsfiddle.net/jonathon/7xBRf/

私はtypeof(e.which)行なったし、それはあなたが必要としないので、それは数が、だと言いましたその周りの引用符。私はIE8、Chrome、FFでこれをテストしました。

+1

奇妙なことに、BackspaceはIEでキー押しイベントをトリガーしません。 –

+1

ありがとうございます。バックスペースがIEのキー押しイベントを引き起こさないのはすごく驚いています。 – jack

3

@JonathonボルスターのコードはOperaで動作しません。

これはOpera、IE、FF、Chromeで有効です。

$("#noBackspacesHere").bind("keypress keydown", function(e) { 
    if (e.which == 8) { 
     e.preventDefault(); 
    } 
}); 

whichは、常に関係なく、あなたが使用しているもののブラウザ存在しないであろうように、jQueryのイベントオブジェクトを正規化しているためまた、e.whichは、キーコードをチェックするための好ましい方法です。

+0

確かに。なぜあなたはe.preventDefault()を追加しますか?あなたはfalseを返すfalseを使用しているので、falseはその機能+ stopPropagationを持っているので重複しているようですか? – jack

+0

私は "返品偽"の方法が好きだったことは一度もありません。 PreventDefaultはより洗練されているように感じており、他の肯定的な効果があると思います。あなたの質問には、どちらか一方を使用してください。ここでの冗長性は必要ありません。 –

+0

@jack:それは良い質問です。それを探した後、私はそれを間違って使っていることに気付きました。 'e.preventDefault();'を使うと、その行を越えて関数の最後まで実行を続けます。私の意図は 'return false;'であり、[this](http://fuelyourcoding.com/jquery-events-stop-misusing-return-false/)によると機能の継続を止めることでした。それは伝播を停止するだけでなく、デフォルトの動作を妨げると述べています。私はjQueryがそのように処理したことに気づいていませんでした。そう、ええ、この場合、あなたは 'false falseを返す必要はありません。 –

関連する問題