2011-03-01 61 views
4

使用按鈕,我可以調用其上的click()方法來生成點擊。但是DIV在所有瀏覽器上都沒有這種方法。然而,我可以將點擊事件監聽器附加到它們上(通過設置.onclick="..."或添加事件監聽器)。如何合成DIV元素上的瀏覽器單擊事件?

有沒有什麼辦法讓我通過編程方式「合成」這樣一個元素的點擊,但是沒有使用jQuery?理想情況下,這不會依賴於註冊的聽衆的具體方式(所以簡單地調用eval(div.onclick)不適用於我),並且可以在所有現代瀏覽器中工作。

(對於好奇,我需要這個自動測試,不欺騙用戶。)

+0

如果點擊不起作用,那麼可以使用onmousedown/onmouseup作爲解決方法。如果沒有這些,標準拖放'拖放庫不起作用。 – 2011-03-01 20:17:31

+0

所以 - 讓我直截了當 - 你想跨瀏覽器的JavaScript - 並不想使用jQuery?你要麼爲失敗而努力,要麼努力工作。 – wiifm 2011-03-01 20:19:16

+0

爲什麼eval(div.onclick)不適合你? – 2011-03-01 20:31:07

回答

5

我最近寫了一個函數來做到這一點到我的庫中,它可以在GitHub存儲庫here中找到。

它是完全跨瀏覽器並觸發選擇器引擎返回的元素上的指定事件。我相信你可以從中提取你需要的代碼。

如果不是,這裏是你需要的。用元素替換元素。並鍵入事件的類型,在這種情況下,click

// Check for createEventObject 
if(document.createEventObject){ 
    // Trigger for Internet Explorer 
    trigger = document.createEventObject(); 
    element.fireEvent('on' + type, trigger); 
} 
else { 
    // Trigger for the good browsers 
    trigger = document.createEvent('HTMLEvents'); 
    trigger.initEvent(type, true, true); 
    element.dispatchEvent(trigger); 
} 

這是一個示例實現。

function simulateEvent(element, type) { 
    // Check for createEventObject 
    if(document.createEventObject){ 
     // Trigger for Internet Explorer 
     trigger = document.createEventObject(); 
     element.fireEvent('on' + type, trigger); 
    } 
    else { 
     // Trigger for the good browsers 
     trigger = document.createEvent('HTMLEvents'); 
     trigger.initEvent(type, true, true); 
     element.dispatchEvent(trigger); 
    } 
} 
+0

謝謝!這正是我所期待的。 – levik 2011-03-01 21:20:15

+0

幹得好!謝謝! – smirkingman 2011-04-07 10:53:47

3

如果瀏覽器的DOM兼容,你可以使用DIV元素的dispatchEvent(evt)方法。請致電。

+0

「DOM兼容」是否包含任何版本的IE? – levik 2011-03-01 21:19:52

+0

不是。那麼我知道任何低於IE9的東西都不支持它。我不確定IE9的情況,但它可能確實如此(手指穿過微軟這一次是正確的!)。 – Olical 2011-03-01 21:27:40

相關問題