javascript onkeydown,onkeyup,onkeypress,onclick,ondblclick
更新時(shí)間:2009年02月04日 03:22:27 作者:
昨天群里面的朋友問(wèn)了個(gè)比較有意思的問(wèn)題,keydown,keyup,keypress事件的先后順序。
這里給出一段測(cè)試代碼:
<script type="text/javascript">
document.onkeydown = function(){
document.getElementById("test").innerHTML += "keydown<br/>";
}
document.onkeyup = function(){
document.getElementById("test").innerHTML += "keyup<br/>";
}
document.onkeypress = function(){
document.getElementById("test").innerHTML += "keypress<br/>";
}
</script>
<div id="test"></div>
測(cè)試結(jié)果為:
keydown
keypress
keyup
顯而易見,事件發(fā)生的順序是: keydown --> keypress --> keyup
當(dāng)按住一個(gè)鍵一段時(shí)間后再放開時(shí),結(jié)果為:
keydown
keypress
keydown
keypress
keydown
keypress
keydown
keypress
...
keyup
n個(gè)keydown和n個(gè)keypress,1個(gè)keyup,系統(tǒng)設(shè)置的時(shí)間間隔.
關(guān)于click和dblclick
前段時(shí)間群里面的一個(gè)朋友問(wèn)過(guò)一個(gè)關(guān)于click和dblclick的問(wèn)題,在這里同時(shí)也整理一下,他的要求是click和dblclick有不同的事件處理程序,但是如果觸發(fā)了dblclick則對(duì)click不做處理.如何解決?
我們先來(lái)看一下事件的發(fā)生情況,測(cè)試代碼如下:
<script type="text/javascript">
document.onclick = function(){
document.getElementById("test").innerHTML += "click<br/>";
}
document.ondblclick = function(){
document.getElementById("test").innerHTML += "dblclick<br/>";
}
</script>
<div id="test"></div>
雙擊時(shí)結(jié)果如下:
click
dblclick
當(dāng)放慢點(diǎn)擊速度時(shí),結(jié)果如下:
click
click
click
可見,dblclick時(shí),首先會(huì)觸發(fā)一個(gè)click事件,然后如果在系統(tǒng)設(shè)置的雙擊延遲時(shí)間范圍內(nèi)有第二次click事件,則被認(rèn)為是dblclick事件.
那么如何解決這位朋友提出的問(wèn)題呢?給出代碼如下:
<script type="text/javascript">
function clickTest(){
document.getElementById("test").innerHTML += "click<br/>";
}
function dblclickTest(){
document.getElementById("test").innerHTML += "dblclick<br/>";
}
document.onclick = function(){
this.timeout = window.setTimeout(clickTest,300);
}
document.ondblclick = function(){
if(this.timeout)window.clearTimeout(this.timeout);
dblclickTest();
}
</script>
<div id="test"></div>
雙擊測(cè)試結(jié)果如下:
dblclick
dblclick
dblclick
dblclick
<script type="text/javascript">
document.onkeydown = function(){
document.getElementById("test").innerHTML += "keydown<br/>";
}
document.onkeyup = function(){
document.getElementById("test").innerHTML += "keyup<br/>";
}
document.onkeypress = function(){
document.getElementById("test").innerHTML += "keypress<br/>";
}
</script>
<div id="test"></div>
測(cè)試結(jié)果為:
keydown
keypress
keyup
顯而易見,事件發(fā)生的順序是: keydown --> keypress --> keyup
當(dāng)按住一個(gè)鍵一段時(shí)間后再放開時(shí),結(jié)果為:
keydown
keypress
keydown
keypress
keydown
keypress
keydown
keypress
...
keyup
n個(gè)keydown和n個(gè)keypress,1個(gè)keyup,系統(tǒng)設(shè)置的時(shí)間間隔.
關(guān)于click和dblclick
前段時(shí)間群里面的一個(gè)朋友問(wèn)過(guò)一個(gè)關(guān)于click和dblclick的問(wèn)題,在這里同時(shí)也整理一下,他的要求是click和dblclick有不同的事件處理程序,但是如果觸發(fā)了dblclick則對(duì)click不做處理.如何解決?
我們先來(lái)看一下事件的發(fā)生情況,測(cè)試代碼如下:
<script type="text/javascript">
document.onclick = function(){
document.getElementById("test").innerHTML += "click<br/>";
}
document.ondblclick = function(){
document.getElementById("test").innerHTML += "dblclick<br/>";
}
</script>
<div id="test"></div>
雙擊時(shí)結(jié)果如下:
click
dblclick
當(dāng)放慢點(diǎn)擊速度時(shí),結(jié)果如下:
click
click
click
可見,dblclick時(shí),首先會(huì)觸發(fā)一個(gè)click事件,然后如果在系統(tǒng)設(shè)置的雙擊延遲時(shí)間范圍內(nèi)有第二次click事件,則被認(rèn)為是dblclick事件.
那么如何解決這位朋友提出的問(wèn)題呢?給出代碼如下:
<script type="text/javascript">
function clickTest(){
document.getElementById("test").innerHTML += "click<br/>";
}
function dblclickTest(){
document.getElementById("test").innerHTML += "dblclick<br/>";
}
document.onclick = function(){
this.timeout = window.setTimeout(clickTest,300);
}
document.ondblclick = function(){
if(this.timeout)window.clearTimeout(this.timeout);
dblclickTest();
}
</script>
<div id="test"></div>
雙擊測(cè)試結(jié)果如下:
dblclick
dblclick
dblclick
dblclick
您可能感興趣的文章:
- JavaScript給按鈕綁定點(diǎn)擊事件(onclick)的方法
- js動(dòng)態(tài)添加的DIV中的onclick事件簡(jiǎn)單實(shí)例
- javascript 動(dòng)態(tài)改變onclick事件觸發(fā)函數(shù)代碼
- IE8的JavaScript點(diǎn)擊事件(onclick)不兼容的解決方法
- JavaScript獲取onclick、onchange等事件值的代碼
- js動(dòng)態(tài)添加onclick事件可傳參數(shù)與不傳參數(shù)
- javascript使用onclick事件改變選中行的顏色
- JS中雙擊和單擊事件沖突的解決方法
- js鼠標(biāo)單擊和雙擊事件沖突問(wèn)題的快速解決方法
- JS實(shí)現(xiàn)鼠標(biāo)單擊與雙擊事件共存
- JS實(shí)現(xiàn)同一DOM元素上onClick事件與onDblClick事件并存的解決方法
相關(guān)文章
jquery根據(jù)錨點(diǎn)offset值實(shí)現(xiàn)動(dòng)畫切換
點(diǎn)擊后僵硬的切換是不是很不爽,下面為大家介紹的是根據(jù)錨點(diǎn)offset值來(lái)實(shí)現(xiàn)動(dòng)畫切換,喜歡的朋友不要錯(cuò)過(guò)2014-09-09
JavaScript實(shí)現(xiàn)事件的中斷傳播和行為阻止方法示例
這篇文章主要給大家介紹了利用JavaScript實(shí)現(xiàn)事件的中斷傳播和行為阻止的方法示例,文中給出了詳細(xì)的介紹和示例代碼,相信對(duì)大家的理解和學(xué)習(xí)具有一定的參考借鑒價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-01-01
javascript背景時(shí)鐘實(shí)現(xiàn)方法
這篇文章主要介紹了javascript背景時(shí)鐘實(shí)現(xiàn)方法,涉及javascript時(shí)間及頁(yè)面元素樣式的相關(guān)操作技巧,需要的朋友可以參考下2015-06-06
js方法數(shù)據(jù)驗(yàn)證的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇js方法數(shù)據(jù)驗(yàn)證的簡(jiǎn)單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-09-09
JavaScript如何實(shí)現(xiàn)LRU緩存淘汰算法
LRU(Least Recently Used)緩存淘汰算法是一種常見的緩存淘汰策略,它的核心思想是優(yōu)先淘汰最近最少使用的緩存數(shù)據(jù),以保證緩存中的數(shù)據(jù)始終是最熱門的。本文主要介紹了一些關(guān)于如何實(shí)現(xiàn)LRU緩存淘汰算法的方法,感興趣的小伙伴可以參考一下2023-04-04
javascript判斷兩個(gè)IP地址是否在同一個(gè)網(wǎng)段的實(shí)現(xiàn)思路
要判斷兩個(gè)IP地址是否在同一個(gè)網(wǎng)段,將它們的IP地址分別與子網(wǎng)掩碼做與運(yùn)算,得到的結(jié)果為網(wǎng)絡(luò)號(hào),具體實(shí)現(xiàn)如下,需要的朋友可以參考下2013-12-12

