2009-04-30 30 views
42

在IE中,我可以從JavaScript調用element.click() - 如何在Firefox中完成相同的任務?理想情況下,我希望有一些JavaScript可以跨瀏覽器同樣工作,但如果需要的話,我會爲此使用不同的瀏覽器JavaScript。如何以編程方式點擊JavaScript中的元素?

+1

這個問題也回答了[這裏](http://stackoverflow.com/questions/906486/how-can-i-programmatically-invoke-an-onclick-event-from-a-anchor-tag-while-保持)。 – 2010-12-10 20:45:50

+1

請接受[我的回答](http://stackoverflow.com/a/22469115/865175)作爲一個解決方案,因爲多個用戶也要求它。 – 2015-10-14 08:40:02

回答

51

document.createEvent documentation說: 「createEvent方法已不使用event constructors代替。」

所以,你應該用這個方法來代替:

var clickEvent = new MouseEvent("click", { 
    "view": window, 
    "bubbles": true, 
    "cancelable": false 
}); 

,並啓動它像一個元素此:

element.dispatchEvent(clickEvent); 

如圖所示here

21

使用jQuery你可以做同樣的事情,例如:

$("a").click(); 

這將「點擊」所有錨在頁面上。

+17

就像一個音符,當HREF使用的onclick這項工作,如 ``Click me明白了 – 2011-08-17 03:29:56

10

element.click()是W3C DOM specification概述的標準方法。 Mozilla的Gecko/Firefox follows the standard,只允許在INPUT元素上調用此方法。

+5

的時候,但是當我想以編程方式模擬在非輸入元素的點擊次數沒有幫助。 – Bruce 2009-04-30 21:15:06

8

您是否試圖按照鏈接或觸發onclick?您可以觸發一個onclick像這樣的東西:

var link = document.getElementById(linkId); 
link.onclick.call(link); 
+1

有趣,我會試試看。這是測試工具的一部分,所以我們不會提前知道我們將要單擊的具體元素 - 它是測試用例指定的任何元素。 – Bruce 2009-04-30 21:16:27

+3

您不需要指定上下文;因爲onclick是'link'的屬性,所以上下文將被適當地設置。 – James 2009-04-30 21:21:08

+2

這在Chrome中不起作用。控制檯發生錯誤,說「方法」不存在。 – kbpontius 2015-04-08 03:16:16

7

這裏是一個跨瀏覽器工作的功能(可用於比單擊處理其他太):

function eventFire(el, etype){ 
    if (el.fireEvent) { 
     el.fireEvent('on' + etype); 
    } else { 
     var evObj = document.createEvent('Events'); 
     evObj.initEvent(etype, true, false); 
     el.dispatchEvent(evObj); 
    } 
} 
29

對於Firefox鏈接顯示爲「特殊」。我能夠得到這個工作的唯一方法是使用createEvent described here on MDN並調用initMouseEvent函數。即使是完全沒工作,我不得不手動告訴瀏覽器打開一個鏈接...

var theEvent = document.createEvent("MouseEvent"); 
theEvent.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); 
var element = document.getElementById('link'); 
element.dispatchEvent(theEvent); 

while (element) 
{ 
    if (element.tagName == "A" && element.href != "") 
    { 
     if (element.target == "_blank") { window.open(element.href, element.target); } 
     else { document.location = element.href; } 
     element = null; 
    } 
    else 
    { 
     element = element.parentElement; 
    } 
} 
1

我用KooiInc的功能上面列出,但我不得不使用兩種不同的輸入類型一個「按鈕」的IE瀏覽器還有一個針對FireFox的「提交」。我不確定爲什麼,但它的工作原理。

// HTML

<input type="button" id="btnEmailHidden" style="display:none" /> 
<input type="submit" id="btnEmailHidden2" style="display:none" /> 

//在JavaScript

var hiddenBtn = document.getElementById("btnEmailHidden"); 

if (hiddenBtn.fireEvent) { 
    hiddenBtn.fireEvent('onclick'); 
    hiddenBtn[eType](); 
} 
else { 
    // dispatch for firefox + others 
    var evObj = document.createEvent('MouseEvent'); 
    evObj.initEvent(eType, true, true); 
    var hiddenBtn2 = document.getElementById("btnEmailHidden2"); 
    hiddenBtn2.dispatchEvent(evObj); 
} 

我有搜索和嘗試了很多建議,但是這是結束了工作。如果我還有更多的時間,我希望調查爲什麼提交與FF和按鈕與IE瀏覽器的作品,但這將是一個豪華的權利,現在到下一個問題。

相關問題