2010-07-18 9 views
65

क्या वेबपृष्ठ के भीतर जावास्क्रिप्ट में एक क्लिक अनुकरण करने के लिए दिए गए निर्देशांक का उपयोग करना संभव है?जावास्क्रिप्ट में एक्स, वाई निर्देशांक का उपयोग करके एक क्लिक को अनुकरण कैसे करें?

+2

आपका लक्ष्य क्या है? :) क्या आप उदाहरण के लिए एक छवि मानचित्र पर एक क्लिक अनुकरण करने की कोशिश कर रहे हैं? –

उत्तर

109

आप प्रेषण ईवेंट पर भेज सकते हैं, हालांकि यह वास्तविक क्लिक के समान नहीं है। उदाहरण के लिए, इसका उपयोग क्रॉस-डोमेन आईफ्रेम दस्तावेज़ को यह सोचने के लिए नहीं किया जा सकता है कि इसे क्लिक किया गया था।

सभी आधुनिक ब्राउज़र document.elementFromPoint और HTMLElement.prototype.click() का समर्थन करते हैं, कम से कम आईई 6, फ़ायरफ़ॉक्स 5, क्रोम के किसी भी संस्करण और शायद सफारी के किसी भी संस्करण की आपको परवाह है। यह भी लिंक का अनुसरण करें और प्रस्तुत करेगा रूपों:

document.elementFromPoint(x, y).click(); 

https://developer.mozilla.org/En/DOM:document.elementFromPoint https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click

+5

यह आश्चर्यजनक है !! ठीक वही जो मेरे द्वारा खोजा जा रहा था!!! = ओ – RadiantHex

+0

क्या यह आईई और वेबकिट के साथ काम करता है? – RadiantHex

+1

@RadiantHex: हां, वास्तव में आईई इसे लागू करने वाला पहला व्यक्ति था और यह आईई 6 पर वापस चला गया। क्रोम, फ़ायरफ़ॉक्स और सफारी 5 कार्यान्वयन ठीक हैं लेकिन सफारी 4 और ओपेरा गलत हैं (हालांकि व्यावहारिक)। Http://www.quirksmode.org/dom/w3c_cssom.html#documentview देखें। –

1

सुरक्षा कारणों से, आप जावा पॉइंटर को जावास्क्रिप्ट से नहीं ले जा सकते हैं, न ही इसके साथ एक क्लिक अनुकरण कर सकते हैं।

क्या आप इसे पूरा करने की कोशिश कर रहे हैं?

+0

@Aicule: मुझे बताने के लिए धन्यवाद! मैं प्रश्न में थोड़ी सी जानकारी जोड़ूंगा। मैं बस प्रयोग कर रहा हूं, वास्तव में उत्पादक कुछ नहीं =) – RadiantHex

+1

क्रोम और सफारी में, आप एक विशिष्ट एक्स, वाई स्थिति पर एक क्लिक को आग लगा सकते हैं। इस प्रकार [यह डेमो] (http://thdoan.github.io/magnify/demo-map.html) काम करता है। फ़ायरफ़ॉक्स एकमात्र ब्राउज़र है जहां यह विफल रहता है, इसलिए शायद यह एक फ़ायरफ़ॉक्स-विशिष्ट सुरक्षा नीति है। – 10basetom

+0

सत्य नीचे दिए गए उत्तर में है, 'createEvent() '+' initMouseEvent() ' – Valer

45

हाँ, आप एक माउस क्लिक एक ईवेंट बनाने और इसे भेजने से अनुकरण कर सकते हैं:

function click(x,y){ 
    var ev = document.createEvent("MouseEvent"); 
    var el = document.elementFromPoint(x,y); 
    ev.initMouseEvent(
     "click", 
     true /* bubble */, true /* cancelable */, 
     window, null, 
     x, y, 0, 0, /* coordinates */ 
     false, false, false, false, /* modifier keys */ 
     0 /*left*/, null 
    ); 
    el.dispatchEvent(ev); 
} 

का उपयोग कर से सावधान रहें click तत्व पर विधि - यह व्यापक रूप से कार्यान्वित है लेकिन मानक नहीं है और उदाहरण में विफल हो जाएगा PhantomJS। मुझे लगता है कि .click() का jQuery का कार्यान्वयन सही काम करता है लेकिन पुष्टि नहीं हुई है।

+0

मुझे एक गड़बड़ से बचाया। मेरी प्रारंभिक विधि विफल रही लेकिन यह बचाव के लिए आया, धन्यवाद। JQuery का उपयोग न करने के लिए – iChux

+3

प्लस 1। स्वीकार्य उत्तर के विपरीत, यह एक _does_ प्रश्न का उत्तर देता है। – tomekwi

+1

यह jQuery की '$ .click()' –

18

यह केवल torazaburo's answer है, जो MouseEvent ऑब्जेक्ट का उपयोग करने के लिए अपडेट किया गया है।

function click(x, y) 
{ 
    var ev = new MouseEvent('click', { 
     'view': window, 
     'bubbles': true, 
     'cancelable': true, 
     'screenX': x, 
     'screenY': y 
    }); 

    var el = document.elementFromPoint(x, y); 

    el.dispatchEvent(ev); 
} 
संबंधित मुद्दे