2009-09-10 120 views
27

如何在keydown停止按鍵事件。停止按鍵事件

我有一個keydown處理程序,我需要停止按鍵事件。

其實我有一個窗體和文本框在裏面。

當用戶按「輸入」鍵,keydown我觸發事件和處理程序。

表單提交將在按鍵中觸發,所以我需要停止我的keydown處理程序中的按鍵事件。

回答

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; 
} 

返回FALSE來停止事件傳播

+1

event.preventDefault();不在歌劇中工作 – Santhosh 2009-09-10 11:46:05

+0

var suppressEvent = false; function onKeyDown(event){ suppressEvent = true; event.preventDefault(); } function onKeyPress(event){ if(suppressEvent)event.preventDefault(); } – andho 2011-04-15 08:07:36

+0

非常感謝你@john。這幫了我一個問題,當我的自定義事件處理程序導致輸入鍵移動到下表中的單元格時,_AND_在該新單元格中添加了不必要的額外新行。我只需要取消輸入鍵的默認事件。 – 2016-10-26 16:49:22

0

寫,

<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> 

中的keydown的處理程序。

1

嘗試在事件處理程序中使用event.cancelBubble = true

0

我能夠得到event.preventDefault();在Safari和Firefox中工作,但不支持IE7或IE8。

如果您只想禁用回車鍵,請確保您還在檢查該鍵的值(13爲Enter)並僅設置event.preventDefault()。

任何人都能想出一個答案爲IE7/8或Opera?

+0

我知道這是一個非常古老的線程,但由於你的問題仍然沒有答案,我會。事實上,我最近發現了一個針對您指定問題的工作解決方法: 您在提交併隱藏並禁用您的提交按鈕時使您的表單返回false。然後你創建第二個按鈕(它不是提交類型的),它實際上將刪除onsubmit事件的返回false屬性,並刪除按鈕的禁用。之後,您可以使用此按鈕來模擬實際提交按鈕上的點擊事件。你可以在這裏找到一個工作示例: http://jsfiddle.net/rsauxil/qyf8L/6/。 – JohannesB 2013-08-28 14:11:13

3

在opera中,您必須使用keypress事件來防止鍵盤事件的默認操作。​​用於防止所有瀏覽器中的默認操作,但不在opera中。

請參閱this long list of inconsistencies跨瀏覽器的鍵盤處理。

0

在這裏,我停止了事件冒泡的上/下/左/右按鍵:

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

我也試過e.preventDefaultevent.cancelBubble =真從上面的答案,但他們沒有影響。