जावास्क्रिप्ट में x, y निर्देशांक का उपयोग करके एक क्लिक का अनुकरण कैसे करें?


93

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


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

जवाबों:


146

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

सभी आधुनिक ब्राउज़र समर्थन करते हैं document.elementFromPointऔर HTMLElement.prototype.click()कम से कम IE 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


1
@RadiantHex: हाँ, वास्तव में IE इसे लागू करने वाला पहला था और यह IE6 पर वापस जाता है। क्रोम, फ़ायरफ़ॉक्स और सफारी 5 कार्यान्वयन ठीक हैं लेकिन सफारी 4 और ओपेरा गलत हैं (हालांकि काम करने योग्य हैं)। Quirksmode.org/dom/w3c_cssom.html#documentview देखें ।
एंडी ई

1
मैं इस खोज के बारे में बहुत खुश हूँ !! = डी कई चीजों को असंभव समझा जाता है अब =) ... या कम से कम जटिल। धन्यवाद!!
रेडिएंटहैक्स

1
यह $ .live () घटनाओं के साथ काम करने के लिए प्रकट नहीं होता है, क्या कोई इसे $ .live () के साथ बनाई गई घटनाओं के साथ कैसे काम करता है?
एक्शनऑव

1
@AndyE यह अब निम्न स्थिति में काम कर रहा है: मेरे पास वेबपेज है, मैं अपने डोमेन की तुलना में किसी अन्य डोमेन से इफ्रेम लोड कर रहा हूं। और मैं iframe क्षेत्र में क्लिक करना चाहता हूं। क्या आपके पास इस बारे में कुछ समाधान है?
परिक्षित

2
@ अपरिक्स: नहीं, यह संभव नहीं है। आप iframe पर एक क्लिक का अनुकरण कर सकते हैं, लेकिन यह केवल युक्त दस्तावेज़ को प्रचारित करेगा। निहित दस्तावेज़ में कुछ भी प्रभावित नहीं होगा (बहुत स्पष्ट सुरक्षा कारणों के लिए)।
एंडी ई

67

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

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 में विफल रहेगा। मुझे लगता है कि jQuery का कार्यान्वयन .click()सही काम करता है लेकिन इसकी पुष्टि नहीं हुई है।


मुझे झंझट से बचाया। मेरी प्रारंभिक विधि विफल रही लेकिन यह बचाव के लिए आया, धन्यवाद।
इक्स

3
j1 का उपयोग नहीं करने के लिए plus1। स्वीकार किए जाते हैं जवाब देने के लिए इसके विपरीत में, यह एक करता है इस सवाल का जवाब।
टॉमकिवी

1
यह jQuery के$.click()
स्टीवन लू

7
initMouseEventपदावनत कर दिया गया है: developer.mozilla.org/en-US/docs/Web/API/MouseEvent/…
vikeri

3
पदावनत के बजाय initMouseEventआप इसका उपयोग कर सकते हैं var event = new MouseEvent( "click", { clientX: x, clientY: y, bubbles: true } )यह भी stackoverflow.com/a/36144688/384670 में दिखाया गया है ।
एम कटज


0

यह मेरे लिए काम नहीं करता है लेकिन यह कंसोल को सही तत्व प्रिंट करता है

यह कोड है:

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);
    console.log(el); //print element to console
    el.dispatchEvent(ev);
}
click(400, 400);

-2

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

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


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

2
क्रोम और सफारी में, आप एक विशिष्ट x, y स्थिति पर एक क्लिक फायर कर सकते हैं। यह डेमो कैसे काम करता है। फ़ायरफ़ॉक्स एकमात्र ब्राउज़र है जहाँ यह विफल हो जाता है, इसलिए शायद यह फ़ायरफ़ॉक्स-विशिष्ट सुरक्षा नीति है।
प्रातः

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

1
मेरे मामले में, परीक्षण।
जोस

आप निश्चित रूप से विशिष्ट एक्स / वाई निर्देशांक के साथ एक क्लिक का अनुकरण कर सकते हैं, हालांकि यह बिल्कुल उसी तरह व्यवहार नहीं करेगा।
अगामनेमस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.