2009-03-16 22 views
5

मैं एक लिंक (मैं YUI उपयोग कर रहा हूँ) एक श्रोता इसे करने के लिए दी जाती है है:जावास्क्रिप्ट: एक लिंक पर क्लिक अनुकरण

YAHOO.util.Event.on(Element, 'click', function(){ /* some functionality */}); 

मैं ही कार्यक्षमता चाहते हैं एक और स्थिति में होने के लिए कि उपयोगकर्ता-क्लिक शामिल नहीं है। आदर्श रूप से मैं तत्व पर "क्लिक" अनुकरण कर सकता हूं और कार्यक्षमता स्वचालित रूप से आग लग सकता हूं। मैं ये कैसे करूं? बहुत खराब यह काम नहीं करता:

$('Element').click() 

धन्यवाद।

उत्तर

3

आप अपना कार्य अलग से घोषित कर सकते हैं।

function DoThisOnClick() { 
} 

फिर ऑनक्लिक ईवेंट के लिए असाइन करें के रूप में आप अभी करते हैं, उदाहरण के लिए:

YAHOO.util.Event.on(Element, 'click', DoThisOnClick) 

और आप इसे कॉल कर सकते हैं जब भी आप चाहते हैं :-)

DoThisOnClick() 
+0

सच है ... लेकिन यूयूआई इवेंट हैंडलर के पास 'इस' और वाईयूआई ढांचे द्वारा संचालित अन्य पैरामीटर जैसे चरों तक पहुंच है। यह एक ही घटना को आग लगाने के लिए आदर्श होगा। –

+0

"यह" आपके द्वारा क्लिक की गई वस्तु के संदर्भ में है। यदि आप स्वयं फ़ंक्शन को कॉल करते हैं, तो ऐसी कोई वस्तु नहीं है। तो आपके काम को इससे निपटने की जरूरत है। कोशिश करें: अगर (यह) // smth; अन्य // जब कोई "यह" –

-1

पाठ्यक्रम $ के ('एलिमेंट')। क्लिक करें() काम नहीं करेगा, लेकिन अगर आप jquery शामिल कर सकते हैं, तो यह यूई के साथ अच्छी तरह से काम करता है।

मैं आप निम्नलिखित करने की ज़रूरत untestand के रूप में:

function myfunc(){ 
//functionality 
} 

YAHOO.util.Event.on(Element, 'click', myfunc); 

फिर myfunc फोन जब कुछ और होने की जरूरत है।

-4

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

+0

नहीं है तो कृपया smth कृपया विस्तृत करें। – TweeZz

9

आप fireEvent (आईई) और dispatchEvent (अन्य) के लिए देख रहे हैं।

YUI 3 के लिए यह सब अच्छी तरह से Y.Event.simulate() में लपेटा जाता है:

YUI().use("node", function(Y) { 
    Y.Event.simulate(document.body, "click", { shiftKey: true }) 
}) 
9

MDC एक अच्छा example of using dispatchEvent है क्लिक ईवेंट अनुकरण करने के लिए।

function simulateClick(elm) { 
    var evt = document.createEvent("MouseEvents"); 
    evt.initMouseEvent("click", true, true, window, 
    0, 0, 0, 0, 0, false, false, false, false, 0, null); 
    var canceled = !elm.dispatchEvent(evt); 
    if(canceled) { 
    // A handler called preventDefault 
    // uh-oh, did some XSS hack your site? 
    } else { 
    // None of the handlers called preventDefault 
    // do stuff 
    } 
} 
+0

यह बहुत अच्छी तरह से काम करता है, और इसे लागू करना बहुत आसान है। धन्यवाद ! – gramm

+0

क्या मुझे ऐसा करने के लिए यूयूआई रखना है? –

+0

नहीं, आपको इसका उपयोग करने के लिए यूयूआई का उपयोग करने की आवश्यकता नहीं है। –

1

मामले में किसी को भी एक ढांचे नास्तिक रास्ता तलाश इस में मुलाकात किसी भी HTML आग और करने के लिए:

यहाँ कुछ कोड एक तत्व भी जांच होती है कि कुछ घटना को रद्द करता है, तो पर एक क्लिक के अनुकरण करने के लिए है How to simulate a mouse click using JavaScript?

0

1) पहला समाधान

लेख http://mattsnider.com/simulating-events-using-yui/ बताता है कि कैसे YA का उपयोग कर एक क्लिक अनुकरण करने के लिए: माउस घटना, यहाँ एक नजर है HOO:

var simulateClickEvent = function(elem) { 
    var node = YAHOO.util.Dom.get(elem); 

    while (node && window !== node) { 
     var listeners = YAHOO.util.Event.getListeners(node, 'click'); 

     if (listeners && listeners.length) { 
      listeners.batch(function(o) { 
       o.fn.call(o.adjust ? o.scope : this, {target: node}, o.obj); 
      }); 
     } 

     node = node.parentNode; 
    } 
}; 

आप देख सकते हैं, समारोह नोड और उसके माता-पिता से अधिक लूप और उनमें से प्रत्येक के लिए श्रोताओं की सूची हो जाता है और उन्हें कहते हैं।

2) दूसरा समाधान

वहाँ भी एक और तरीका यह करने के लिए है। उदाहरण के लिए:

var elem = YAHOO.util.Dom.get("id-of-the-element"); 
elem.fireEvent("click", {}); 

जहां समारोह

3) तृतीय समाधान

संस्करण YUI2 का 2.9 एक बेहतर समाधान के रूप में प्रयोग किया जाता है: http://yui.github.io/yui2/docs/yui_2.9.0_full/docs/YAHOO.util.UserAction.html

4) उल्लिखित समाधान

वाईयूआई 3 में एक बेहतर और साफ समाधान भी है: http://yuilibrary.com/yui/docs/event/simulate.html

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