2010-06-16 28 views
56

Chức năng của sự kiện javascript là gì? Xin vui lòng ngắn gọn với ví dụ.sự kiện javascript e.which?

+5

thì tại sao chúng ta cần diễn đàn? Mỗi người có thể google truy vấn của họ. Nó chia sẻ kiến ​​thức. – minil

+34

Hai năm sau, tôi đã không hiểu được tài sản này sau khi đọc nhiều trang ở nơi khác. Sau đó, tôi tình cờ gặp bài đăng cũ này và hiểu rồi. Vì vậy, để @Reigel, có thể xem xét lại trước khi nói với ai đó để Google một cái gì đó. Có lẽ họ đã làm. Đó không phải là mục đích của SO. – Aerovistae

+4

Giống với @JuanMendes – Aerovistae

Trả lời

55

e.which không phải là sự kiện, which là thuộc tính của đối tượng event, mà hầu hết mọi người gắn nhãn là e trong trình xử lý sự kiện của họ. Nó chứa mã khóa của khóa được nhấn để kích hoạt sự kiện (ví dụ: keydown, keyup).

document.onkeypress = function(myEvent) { // doesn't have to be "e" 
    console.log(myEvent.which); 
}; 

Với mã đó, bảng điều khiển sẽ in mã của bất kỳ phím nào bạn nhấn trên bàn phím.

+1

Nó không thực sự yêu cầu Firebug, chỉ một số loại console.log (mà nhiều hơn Firebug cung cấp, ví dụ như webkitt-ens). – npup

+1

'cũng' tồn tại trên các sự kiện chuột và ví dụ của bạn sẽ không hoạt động trên IE, trong đó trình xử lý sự kiện không nhận được tham số sự kiện. –

+3

Chỉ cần một lưu ý giúp đỡ cho tất cả những người tìm thấy điều này (sẽ đăng trên e.which câu hỏi khác quá prolly quá). Tôi đã thực hiện một bài đăng tại các diễn đàn jQuery liệt kê một phần lớn các mã e.which và các khóa liên quan của chúng. Bài đăng ở đây -> http://forum.jquery.com/topic/eventwhich-code-list-just-for-help – SpYk3HH

71

which là tài sản của Event đối tượng. Nó được định nghĩa cho các sự kiện liên quan đến khóa và chuột trong hầu hết các trình duyệt, nhưng trong cả hai trường hợp không được định nghĩa trong IE (trước phiên bản 9).

Đối với sự kiện liên quan đến chuột, which chỉ định nút chuột có liên quan. Đối với IE < 9, giá trị tương đương được tìm thấy trong window.event.button. Chỉ cần làm phức tạp mọi thứ, trình duyệt không phải của IE cũng hỗ trợ thuộc tính button của các sự kiện chuột đôi khi báo cáo một giá trị khác từ which. Ngoài ra, các trình duyệt đôi khi có các giá trị khác nhau cho cùng một nút hoặc kết hợp các nút. Nếu bạn muốn sử dụng which trong tất cả các trình duyệt hỗ trợ nó và button trong IE < 9, hằng số là giá trị 1 luôn có nghĩa là nút chuột trái được tham gia (mặc dù không nhất thiết phải là một mình).

document.onmousedown = function(e) { 
    e = e || window.event; 
    var button = (typeof e.which != "undefined") ? e.which : e.button; 
    if (button == 1) { 
     alert("Left mouse button down"); 
    } 
}; 

Để phân tích đầy đủ, tôi khuyên bạn nên Jan Wolter's article on JavaScript mouse events.

Đối với các sự kiện liên quan đến khóa, which liên quan đến khóa đã được nhấn. Đối với các sự kiện keydownkeyup, điều này tương đối đơn giản: đó là mã khóa cho phím được bấm và trả về cùng giá trị với thuộc tính keyCode của sự kiện. Vì tất cả các trình duyệt đều hỗ trợ thuộc tính keyCode và IE < 9 không hỗ trợ which, bạn thường nên sử dụng keyCode cho các sự kiện keydownkeyup.

Đối với keypress sự kiện, tình hình phức tạp hơn. Đối với các phím ký tự có thể in, which là mã ký tự cho phím được bấm và được hỗ trợ trong nhiều trình duyệt hơn thuộc tính charCode. Trong IE < 9 tương đương lại thuộc tính keyCode. Vì vậy, để phát hiện các ký tự gõ, sau đây là một phương pháp tiếp cận qua trình duyệt. Hãy nhận biết rằng mã dưới đây không nên được sử dụng cho các phím không thể in được như các phím mũi tên, mà bạn thay vì phải phát hiện trong trường hợp keydown:

document.onkeypress = function(e) { 
    e = e || window.event; 
    var charCode = (typeof e.which == "number") ? e.which : e.keyCode; 
    if (charCode) { 
     alert("Character typed: " + String.fromCharCode(charCode)); 
    } 
}; 

Một lần nữa, để biết thêm chi tiết Tôi khuyên bạn nên Jan Wolter's article on JavaScript key events

+2

Tôi không hiểu tại sao đây không phải là câu trả lời được chấp nhận ?! – Toskan

+5

@Toskan: Câu trả lời được chấp nhận đã được đăng một vài giờ trước khi tôi, và có thể đã được chấp nhận trước khi tôi đăng bài của tôi. –

+1

OP cho phép _Tim down_ bằng cách không chấp nhận điều này làm câu trả lời! :) – sohaiby

5

này tính năng đã bị xóa khỏi các tiêu chuẩn Web. Mặc dù một số trình duyệt vẫn có thể hỗ trợ nó, nó đang trong quá trình bị loại bỏ. Không sử dụng nó trong các dự án cũ hoặc mới. Các trang hoặc ứng dụng web sử dụng nó có thể bị hỏng bất cứ lúc nào.

Thay vào đó, bạn nên sử dụng KeyboardEvent.key nếu có.

http://codepen.io/KevinOrfas/pen/QKbKAd

3

Trong một sự kiện, e:

e.which 

là giống như:

e.keyCode 

Vì vậy, cả hai chức năng cho phép bạn để có được những keycode của phím nhấn trong một phím nhấn, sự kiện keydown hoặc keyup

Nhiều người sử dụng || (OR) để đảm bảo mã của họ hoạt động trong các trình duyệt không hỗ trợ thuộc tính nào. Xem mã bên dưới:

document.onkeypress = function(e) { 
    var key = e.which || e.keyCode; 
    alert(key); 
} 
+0

Hey guys câu trả lời của tôi là chính xác chỉ cần thử nó !! –

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