2009-04-30 13 views
42

आईई में, मैं सिर्फ जावास्क्रिप्ट से element.click() को कॉल कर सकता हूं - मैं फ़ायरफ़ॉक्स में एक ही कार्य कैसे पूरा करूं? आदर्श रूप से मैं कुछ जावास्क्रिप्ट रखना चाहता हूं जो समान रूप से अच्छी तरह से क्रॉस-ब्राउज़र काम करेगा, लेकिन यदि आवश्यक हो तो इसके लिए मेरे पास अलग-अलग ब्राउज़र ब्राउज़र होगी।मैं जावास्क्रिप्ट में किसी तत्व पर प्रोग्रामेटिक रूप से क्लिक कैसे करूं?

+1

इस प्रश्न का भी उत्तर दिया गया [यहां] (http://stackoverflow.com/questions/906486/how-can-i-programmatically-invoke-an-onclick-event-from-a-anchor-tag-while- रखने के लिए)। –

+1

कृपया [मेरा जवाब] (http://stackoverflow.com/a/22469115/865175) को एक समाधान के रूप में स्वीकार करें, क्योंकि एकाधिक उपयोगकर्ताओं ने भी इसका अनुरोध किया है। –

उत्तर

51

document.createEvent documentation कहना है कि "createEvent विधि बहिष्कृत है बजाय event constructors का प्रयोग करें।।"

तो आप के बजाय इस विधि का उपयोग करना चाहिए:

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

और की तरह एक तत्व पर यह आग यह:

element.dispatchEvent(clickEvent); 

दिखाया गया है here

+5

फ़ायरफ़ॉक्स और क्रोम – deej

+1

दोनों में मेरे लिए काम करने वाला एकमात्र ऐसा हो सकता है कि इसे वर्तमान के रूप में स्वीकार किया जाना चाहिए क्योंकि वर्तमान वाला '0 9 से है और क्रोम के लिए उत्कृष्ट समाधान –

+1

का उपयोग करता है। उस तत्व को प्राप्त करने के लिए कोड जो तब 'प्रेषण (क्लिक करें);' मेरे लिए था: 'var element = document.getElementById (" id-tag ");' – kbpontius

21

jQuery का उपयोग करके आप बिल्कुल वही बात, उदाहरण के लिए कर सकते हैं:

$("a").click(); 

कौन सा पृष्ठ पर "क्लिक" होगा सभी एंकर।

+17

बस एक ध्यान दें, यह काम जब href onclick का उपयोग करता है, जैसे '' Click me

10

element.click() W3C DOM specification द्वारा उल्लिखित एक मानक विधि है। मोज़िला का गेको/फ़ायरफ़ॉक्स follows the standard और केवल इस विधि को INPUT तत्वों पर कॉल करने की अनुमति देता है।

+5

समझ का उपयोग करते हुए, लेकिन नहीं उपयोगी है जब मैं प्रोग्राम के रूप में गैर इनपुट तत्वों पर क्लिक करता है अनुकरण करना चाहते हैं। – Bruce

8

क्या आप वास्तव में लिंक का पालन करने या ऑनक्लिक ट्रिगर करने का प्रयास कर रहे हैं? आप कुछ इस तरह के साथ एक onclick को गति प्रदान कर सकते हैं:

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

दिलचस्प, मैं इसे आज़मा दूंगा। यह एक परीक्षण दोहन का हिस्सा है, इसलिए हम समय से पहले नहीं जानते कि हम किस विशिष्ट तत्व पर क्लिक करने जा रहे हैं - यह परीक्षण केस निर्दिष्ट करता है। – Bruce

+3

आपको एक संदर्भ निर्दिष्ट करने की आवश्यकता नहीं है; चूंकि ऑनक्लिक 'लिंक' की एक संपत्ति है, इसलिए संदर्भ पहले से ही उचित रूप से सेट किया जाएगा। – James

+2

यह क्रोम में काम नहीं किया। कंसोल में एक त्रुटि फेंक दी गई थी कि "कॉल" विधि मौजूद नहीं है। – kbpontius

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); 
    } 
} 
+1

मैंने पाया कि मुझे 'एल [एटइप]();' आईई को देशी घटना को आग लगाने के लिए लाइन 3 पर 'उपयोग करने की आवश्यकता है (मैं एक क्लिक हैंडलर के साथ परीक्षण कर रहा था - http://jsfiddle.net/Pc8qE/ देखें) –

+1

इसे काम करने के लिए मुझे फ़ायरफ़ॉक्स के लिए सबमिट प्रकार के इनपुट का उपयोग करना था और आईई के लिए टाइप बटन का इनपुट करना था। –

29

फ़ायरफ़ॉक्स लिंक के लिए "विशेष" दिखाई देते हैं। मैं इस काम को पाने में सक्षम था एकमात्र तरीका 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; 
    } 
} 
+2

यह window.open (element.href, element.target) से अलग कैसे होता है - मेरे फ़ायरफ़ॉक्स पर यह बिल्कुल वही काम करता है, और बदसूरत पीले रंग की बार – iirekm

+1

प्रदर्शित करता है यदि आप MouseEvent का तीसरा अंतिम पैरामीटर सत्य पर सेट करते हैं (जिसका अर्थ है मेटाकी (सीएमडी) बटन दबाए जाने पर बटन दबाया गया था), यह टैब को पृष्ठभूमि टैब में नहीं खोल पाएगा, है ना? या यह होगा? – Magne

1

मैं KooiInc के समारोह ऊपर सूचीबद्ध इस्तेमाल किया था, लेकिन मैं IE के लिए दो अलग-अलग इनपुट प्रकार एक 'बटन का इस्तेमाल करना पड़ा और फ़ायरफ़ॉक्स के लिए एक 'सबमिट' करें। मुझे बिल्कुल यकीन नहीं है कि यह क्यों काम करता है।

// एचटीएमएल

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

// जावास्क्रिप्ट

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); 
} 

में मैं खोज की है और कई सुझाव की कोशिश की लेकिन यह क्या काम कर रहा समाप्त हो गया है। अगर मेरे पास कुछ और समय था तो मुझे जांच करना अच्छा लगेगा कि क्यों एफई और आईई के साथ बटन के साथ काम सबमिट करते हैं, लेकिन यह अगली समस्या पर अभी एक लक्जरी होगा।