2009-09-10 52 views
27

Cách dừng sự kiện nhấn phím khi nhấn phím.Dừng sự kiện nhấn phím

Tôi có trình xử lý khóa phím ở đó tôi cần phải dừng sự kiện nhấn phím.

Thực ra tôi có biểu mẫu và hộp văn bản trong đó.

báo chí người dùng whn nhấn phím "enter", keydown tôi kích hoạt sự kiện và có trình xử lý.

gửi biểu mẫu sẽ được kích hoạt trong nhấn phím, vì vậy tôi cần phải dừng sự kiện nhấn phím trong trình xử lý khóa phím của tôi.

Trả lời

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

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

hoặc

function onsubmit(event) { 
    return false; 
} 

trở lại sai để ngăn chặn các sự kiện tuyên truyền

+1

event.preventDefault(); không hoạt động trong opera – Santhosh

+0

var suppressEvent = false; chức năng onKeyDown (sự kiện) { suppressEvent = true; event.preventDefault(); } chức năng trênKeyPress (sự kiện) { nếu (suppressEvent) event.preventDefault(); } – andho

+0

Cảm ơn bạn rất nhiều @ john. Điều này đã giúp tôi với một vấn đề tôi đã có nơi xử lý sự kiện tùy chỉnh của tôi gây ra các phím enter để di chuyển đến các tế bào dưới đây trong một bảng html _AND_ đã được thêm một dòng mới không cần thiết trong tế bào mới. Tôi chỉ cần hủy bỏ sự kiện mặc định của phím enter. –

0

Write,

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

trong handler KeyDown.

1

Hãy thử event.cancelBubble = true trong trình xử lý sự kiện.

0

Tôi đã có thể nhận event.preventDefault(); để làm việc trong Safari và Firefox, nhưng không phải IE7 hoặc IE8.

Nếu bạn chỉ muốn tắt khóa nhập, hãy đảm bảo rằng bạn cũng đang kiểm tra giá trị khóa (13 cho Enter) và chỉ đặt event.preventDefault() cho khóa đó.

Bất kỳ ai cũng có thể đưa ra câu trả lời cho IE7/8 hoặc Opera?

+0

Tôi biết đây là một chủ đề rất cũ, nhưng khi câu hỏi của bạn vẫn chưa được trả lời, tôi sẽ.Trong thực tế, gần đây tôi đã tìm thấy giải pháp khắc phục sự cố cho sự cố bạn đã chỉ định: Bạn làm cho biểu mẫu của mình trả về false và gửi và tắt nút gửi của bạn. Sau đó, bạn tạo ra một nút thứ hai (mà không phải là loại trình) mà infact sẽ loại bỏ các tài sản trả về false của sự kiện onsubmit và loại bỏ các vô hiệu hóa của nút là tốt. Sau đó, bạn sử dụng nút này để mô phỏng sự kiện nhấp chuột trên nút gửi thực. Bạn có thể tìm một ví dụ làm việc tại đây: http://jsfiddle.net/rsauxil/qyf8L/6/. – JohannesB

3

Trong opera, bạn phải sử dụng sự kiện keypress để ngăn các hành động mặc định cho các sự kiện bàn phím. keydown hoạt động để ngăn tác vụ mặc định trong tất cả các trình duyệt nhưng không hoạt động trong opera.

Xem this long list of inconsistencies trong xử lý bàn phím trên các trình duyệt.

0

Ở đây tôi dừng sự kiện bọt lên/dn/trái/phím phải:

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

Tôi cũng đã cố gắng e.preventDefault hoặc event.cancelBubble = true từ các câu trả lời ở trên, nhưng họ không có tác động.

Các vấn đề liên quan