JavaScript與HTML之間的交互是通過事件實現的。事件,就是文檔或瀏覽器窗口中發生的一些特定的交互瞬間,是用戶或瀏覽器自身執行的某種動作。諸如click、load、mousemover,都是事件的名字。可以使用偵聽器來預訂事件,以便事件發生時,執行相應的代碼。而響應某個事件的函數就叫做事件處理程序。對於一個事件,DOM元素通常擁有事件方法屬性和事件處理程序屬性,如click方法和onclick屬性。
在DOM0級規范中,通過JavaScript制定事件處理程序的傳統方式,就是將一個函數賦值給一個事件處理程序屬性。如:
var btn = document.getElementById('myBtn'); btn.onclick = function(){ console.log('click'); }
DOM2級規范中,制定事件處理程序的方式,使用addEventListener函數,如:
var btn = document.getElementById('myBtn'); btn.addEventListener('click', function(){ console.log('click'); }, false);
看過以上基礎之后,開始步入主題。大部分元素都支持click與dblclick,然而在實際工作中,發現這兩個事件之間綁定與觸發方式還是有很多不同。
1、通過以上兩種來綁定的click事件,都可以通過在代碼中調用element.click()方法來觸發。而對於dblclick,我發現元素都沒有dblclick方法。
2、對於click想要在代碼中觸發click事件,有兩種選擇:第一,直接調用元素的click方法。第二,使用自己定義事件。對於dblclick,如果想要利用代碼觸發dblclick,只能使用自定義事件的方式。
在某些情況下,我們可能有想利用單擊模擬雙擊的需求,這種需求分為兩種:
1、同正常綁定dom元素的觸發順序一致,當用戶點擊一下時,觸發click事件,當用戶在極短時間內點擊兩下時,觸發順序為click-click-dblclick:
2、當用戶單擊時,觸發click。當用戶在極短時間內雙擊時,只觸發dblclic:
這種處理方式有一個缺點:當用戶單擊時,會延遲一段時間,然后觸發單擊事件