2009-09-10 31 views
27

keypownでkeypressイベントを停止する方法。keypressイベントを停止する

私はkeypressイベントを停止する必要があるという点でkeydownハンドラを持っています。

実際には、フォームとテキストボックスがあります。

whnユーザーが「enter」キーを押すと、keydownはイベントをトリガし、ハンドラを持っています。

フォーム提出はkeypressでトリガされるので、私のkeydownハンドラでkeypressイベントを停止する必要があります。

答えて

33
function onKeyDown(event) { 
    event.preventDefault(); 
} 

http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-Event-preventDefault

または

function onsubmit(event) { 
    return false; 
} 

イベントの伝播に

+1

event.preventDefault();オペラで動作していません – Santhosh

+0

var suppressEvent = false; 関数onKeyDown(イベント){ suppressEvent = true; event.preventDefault(); } 関数onKeyPress(イベント){ if(suppressEvent)event.preventDefault(); } – andho

+0

ありがとうございます@ジョン。これは私のカスタムイベントハンドラがhtmlテーブルの下にあるセルに移動するためのカスタムイベントハンドラをどこに持っていたのかという問題を助けてくれました_AND_は新しいセルに不必要な新しい行を追加していました。 Enterキーのデフォルトイベントをキャンセルするだけでした。 –

0

書き込み、KeyDownイベントハンドラで

<script type="text/javascript"> 
     function keyDn(obj) 
     { 
     if(window["event"]["keyCode"]==48) // key 0 will disabled keyPress event 
     { 
      obj["onkeypress"]=null; 
      } 
     } 
     function keyPs(obj) 
     { 
     alert("Keypress"); 
     } 

    </script> 

    <form id="form1" runat="server"> 
    <div> 
    <input type="text" onkeydown="keyDn(this)" onkeypress="keyPs(this)" /> 
    </div> 
    </form> 

を停止する場合はfalseリターン。

1

イベントハンドラでevent.cancelBubble = trueを試してください。

0

私はevent.preventDefault()を取得できました。 SafariとFirefoxでは動作しますが、IE7やIE8では動作しません。

Enterキーのみを無効にする場合は、キー値(Enterキーは13)も確認し、そのキーのevent.preventDefault()を設定するだけです。

誰でもIE7/8またはOperaの回答を思い付くことができますか?

+0

私はこれが非常に古いスレッドであることを知っていますが、あなたの質問はまだ答えられていないので、私はします。実際には、指定した問題の回避策が見つかりました。 フォームをfalseに戻して送信し、送信ボタンを非表示にして無効にします。その後、onsubmitイベントの戻りfalseプロパティを削除し、ボタンの無効化をも削除する2番目のボタン(これは型送信ではない)を作成します。その後、このボタンを使用して、実際の送信ボタンのクリックイベントをシミュレートします。ここに実際の例があります: http://jsfiddle.net/rsauxil/qyf8L/6/ – JohannesB

3

キーボードイベントのデフォルトアクションを防ぐには、オペラでkeypressイベントを使用する必要があります。​​は、すべてのブラウザでデフォルトの動作を防止しますが、オペラでは動作しません。

this long list of inconsistenciesを参照してください。

0

ここに私がアップ/ダウン/右/左キーのイベントバブルを停止:

$(document).on("keydown", function(e) { 
     if(e.keyCode >= 37 && e.keyCode <= 40) { 
      e.stopImmediatePropagation(); 
      return; 
     } 
    }); 

私も上記の回答からe.preventDefaultまたはevent.cancelBubble =真を試してみましたが、彼ら影響はありませんでした。

関連する問題