2010-06-16 39 views
56

javascript event e.which的功能是什麼?請舉例說明。JavaScript事件e.which?

+5

那麼爲什麼我們需要論壇?每個人都可以谷歌他們的查詢。它分享知識。 – minil 2010-06-17 05:41:56

+34

兩年後,我在其他地方閱讀了幾頁後,無法理解這個屬性。然後我偶然發現了這個舊帖子並獲得了它。所以對於@Reigel,也許在告訴某人谷歌之前重新考慮一下。也許他們已經做到了。這不是SO的目的。 – Aerovistae 2012-04-11 02:27:14

+4

相同@JuanMendes – Aerovistae 2012-04-11 02:28:39

回答

55

e.which不是事件,whichevent對象的屬性,大多數人在其事件處理程序中標記爲e。它包含被按下以觸發事件的鍵的關鍵代碼(例如:keydown,keyup)。

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

使用該代碼,控制檯將打印出您在鍵盤上按下的任何按鍵的代碼。

+1

它並不需要Firebug,只有某種console.log(比Firebug提供的要多,比如webkitt-ens)。 – npup 2010-06-16 07:19:42

+1

'which'也存在於鼠標事件上,而您的示例在IE中不起作用,其中事件處理程序不會收到事件參數。 – 2010-06-16 08:45:16

+3

只是另一個幫助所有誰發現這一點(將張貼在其他e.which問題)。我在jQuery論壇上發了一篇文章,列出了絕大多數e.which代碼及其相關密鑰。帖子在這裏 - > http://forum.jquery.com/topic/eventwhich-code-list-just-for-help – SpYk3HH 2012-01-13 17:01:34

71

whichEvent對象的財產。它是在大多數瀏覽器中爲與鍵和鼠標有關的事件定義的,但在IE中(在版本9之前)沒有定義這兩種情況。

對於與鼠標有關的事件,which指定了涉及的鼠標按鈕。對於IE < 9,可在window.event.button中找到相應的值。爲了使事情複雜化,非IE瀏覽器還支持鼠標事件的button屬性,有時會報告與which不同的值。而且,瀏覽器有時對於同一按鈕或按鈕組合具有不同的值。如果您堅持在所有支持它的瀏覽器中使用which,並且在IE < 9中使用button,一個常數是值1總是表示鼠標左鍵被包含(儘管不一定是單獨的)。我們推薦Jan Wolter's article on JavaScript mouse events

對於與鍵相關的事件,which與已按下的鍵相關。對於​​和keyup事件,這是相對簡單的:它是按鍵的關鍵代碼,並返回與事件的keyCode屬性相同的值。由於所有瀏覽器都支持keyCode屬性,並且IE < 9不支持which,所以對於​​和keyup事件,通常應使用keyCode

對於keypress事件,情況更爲複雜。對於可打印字符鍵,which是被按下的鍵的字符代碼,並且在比charCode屬性更多的瀏覽器中受支持。在IE < 9中相當於keyCode屬性。因此,爲了檢測輸入的字符,以下是一個跨瀏覽器的方法。請注意,下面的代碼不應該被用於非打印鍵,例如箭頭鍵,你應該在​​事件,而不是檢測:

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

同樣,對於更多的細節,我建議Jan Wolter's article on JavaScript key events

+2

我不明白爲什麼這不是被接受的答案?! – Toskan 2012-09-26 17:11:38

+5

@Toskan:接受的答案是在我的幾個小時前發佈的,並且在我發佈之前可能已被接受。 – 2012-09-26 17:28:12

+1

OP讓_Tim down_不接受這個答案! :) – sohaiby 2015-10-31 12:24:34

5

這功能已從Web標準中刪除。儘管一些瀏覽器可能仍然支持它,但它正在被丟棄。不要在舊項目或新項目中使用它。使用它的頁面或Web應用程序可能會隨時中斷。

如果可用,您應該使用KeyboardEvent.key

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

3

期間發生的事件,e

e.which 

是一樣的:

e.keyCode 

所以這兩個功能讓你獲得一個按鍵時按下的鍵的鍵碼, keydown或keyup事件

很多人請使用||(OR)來確保其代碼在不支持哪些屬性的瀏覽器中工作。看看下面的代碼:

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

嘿傢伙我的回答是正確的只是試試吧! – 2016-11-26 04:52:30