2011-08-16 17 views
7

होने इस जे एस कोड:जावास्क्रिप्ट ईवेंट हैंडलर्स निष्पादन आदेश

document.getElementById('e1').addEventListener('click', function(){alert('1');}, false); 
document.getElementById('e2').addEventListener('click', function(){alert('2');}, false); 
document.getElementById('e1').click(); 
document.getElementById('e2').click(); 

मैं क्या आदेश अलर्ट दिखाई देगा में सोच रहा हूँ - यह आदेश घटनाओं click() द्वारा ट्रिगर की गई में हो जाएगा या यह यादृच्छिक हो सकता है ?

मैं दस्तावेज/मानकीकृत व्यवहार के बारे में पूछ रहा हूं, न कि वर्तमान में कौन से ब्राउज़र लागू होते हैं।

+0

' क्लिक() एक ही परिणाम का उत्पादन करेगा; यह घटनाओं को आग लगाने का तरीका नहीं है। आपको 'createEvent',' initEvent' और 'dispatchEvent' का उपयोग करने की आवश्यकता है। –

+1

नहीं मैं नहीं करता हूं। http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-2651361 –

+0

इस उदाहरण में, ठीक है, लेकिन फायरिंग घटनाओं की यह विधि सभी के संबंध में उपलब्धता के लिए सार्वभौमिक से बहुत दूर है सभी तत्वों पर घटनाओं। घटनाओं को आग लगाने का एकमात्र विश्वसनीय तरीका ऊपर वर्णित तीन विधियों का उपयोग करना है। –

उत्तर

2

अलर्ट क्रम में निष्पादित किया जाएगा - 1 और फिर 2। ऐसा इसलिए है क्योंकि click ईवेंट तुल्यकालिक है (here देखें) - जब .click() जारी किया जाता है तो हैंडलर तुरंत चलाया जाएगा (अंतिम पैराग्राफ here देखें)। तो यह कोड: `काम नहीं करेगा, वैसे

document.getElementById('e1').addEventListener('click', function(){alert('1');}, false); 
document.getElementById('e2').addEventListener('click', function(){alert('2');}, false); 
document.getElementById('e1').click(); 
document.getElementById('e2').click(); 
alert('3'); 

रूप

alert('1'); 
alert('2'); 
alert('3'); 
+0

http://www.w3.org/TR/DOM-Level-3-Events/#sync-async +50 जैसा वादा किया गया –

-1

मैं 1 और फिर 2 होगा। http://jsfiddle.net/kkYfX/

+0

ई 1 क्लिक से पहले ई 2 क्लिक कैसे अलर्ट ट्रिगर कर सकता है सुनिश्चित नहीं है? –

+0

क्योंकि 'क्लिक() 'निष्पादित होने पर ईवेंट हैंडलर तुरंत नहीं चलते हैं। वे उसके बाद "कुछ समय" चलाते हैं - संभवतः अलग-अलग क्रम में होते हैं। –

+0

@ मामरन्स - दूसरे को पहले के बाद बुलाया जाना चाहिए। केवल तभी संभव हो सकता है जब दूसरे बयान से दूसरे को बुलाए जाने से पहले दूसरे को बुलाया जा सके। लेकिन उस मामले में इसे दो बार बुलाया जाएगा, और हमेशा पहले के बाद। यदि श्रोता कैप्चर चरण पर आग लगाना है, तो चीजें अलग हो सकती हैं लेकिन यह कोड नहीं कर रहा है। – RobG

संबंधित मुद्दे