讀jQuery之七 判斷點擊了鼠標哪個鍵的代碼
which 是Firefox引入的,IE不支持。which的本意是獲取鍵盤的鍵值(keyCode)。
jQuery中的which即可以是鍵盤的鍵值,也可以是鼠標的鍵值。
即當判斷用戶按下鍵盤的哪個鍵時可以使用which,當判斷用戶按下鼠標的哪個鍵時也可以用which。它一舉兩用了。
源碼
// Add which for key events
if ( event.which == null && (event.charCode != null || event.keyCode != null) ) {
event.which = event.charCode != null ? event.charCode : event.keyCode;
}
// Add which for click: 1 === left; 2 === middle; 3 === right
// Note: button is not normalized, so don't use it
if ( !event.which && event.button !== undefined ) {
event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
}
標準的button采用0,1,2表示鼠標的左,中,右鍵。jQuery的which則使用用1,2,3。
還有一點讓人不爽的是jQuery文檔 event.which 中并沒有提到which可以表示鼠標按鍵值,只提到了表示鍵盤按鍵值。
源碼中的注釋也讓人誤解。
// Add which for click: 1 === left; 2 === middle; 3 === right
注意這里說的是click ,很容易讓人使用click 事件,但實際上click事件中獲取是錯誤的。
下面就用 click 事件試試:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title></title>
<script src="http://code.jquery.com/jquery-1.6.1.js"></script>
<script type="text/javascript">
$(document).click(function(e){
alert(e.which);
})
</script>
</head>
<body>
</body>
</html>
| IE6/7/8 | IE9 | Firefox4 | Chrome12 | Safari | Opera | |
| 點擊左鍵 | 0 | 1 | 1 | 1 | 1(不停彈出alert) | 1 |
| 點擊中鍵 | 不響應 | 2 | 2 | 2 | 2(不停彈出alert) | 不響應 |
| 點擊右鍵 | 僅彈出右鍵菜單 | 僅彈出右鍵菜單 | 3,彈出右鍵菜單 | 僅彈出右鍵菜單 | 僅彈出右鍵菜單 | 僅彈出右鍵菜單 |
可以看到使用 click 事件并不能按照jQuery設想的那樣左,中,右鍵對應的1,2,3值。各瀏覽器下均不一致,且右鍵根本獲取不到,Safari中還不停的彈出alert。
因此,應該使用 mousedown / mouseup 事件則達到jQuery的設想。jQuery的注釋誤導了人。
此外即使使用 mousedown / mouseup 事件,Opera中也無法獲取中鍵的值。Opera的惡心做法令jQuery也無能為力。
相關文章
詳解jquery validate實現(xiàn)表單驗證 (正則表達式)
本篇文章主要介紹了jquery validate實現(xiàn)表單驗證 (正則表達式),用戶填寫表單時,可以快速地對用戶填寫的數(shù)據(jù)進行驗證,并做出反饋。有興趣的可以了解一下。2017-01-01
jQuery 1.3 和 Validation 驗證插件1.5.1
jQuery 1.3已經(jīng)新鮮出爐了,你可以通過jQuery 的官方博客查看相關細節(jié)。jQuery三歲了!2009-07-07
jQuery鏈式操作如何實現(xiàn)以及為什么要用鏈式操作
jQuery的鏈式操作是如何實現(xiàn)的?為什么要用鏈式操作?接下來會幫助大家解決這兩個問題,感興趣的朋友可以了解下2013-01-01
jquery怎樣實現(xiàn)ajax聯(lián)動框(二)
ajax聯(lián)動框想必大家早有所耳聞,接下來將介紹jquery實現(xiàn)另一種形式的聯(lián)動框,右邊的聯(lián)動框用jquery生成,仿照上篇的js方法修改的,感興趣的你可以參考下希望可以幫助到你2013-03-03
jQuery實現(xiàn)的手動拖動控制進度條效果示例【測試可用】
這篇文章主要介紹了jQuery實現(xiàn)的手動拖動控制進度條效果,涉及jQuery事件響應及頁面元素屬性動態(tài)操作相關實現(xiàn)技巧,需要的朋友可以參考下2018-04-04
jQuery+JSON實現(xiàn)AJAX二級聯(lián)動實例分析
這篇文章主要介紹了jQuery+JSON實現(xiàn)AJAX二級聯(lián)動的方法,以實例形式分析了前臺jQuery結合ajax傳遞json格式數(shù)據(jù)及后臺數(shù)據(jù)處理技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-12-12

