[removed] simulate a click on a link

前端 未结 7 1966
耶瑟儿~
耶瑟儿~ 2020-12-20 21:39

I have a link that has a listener attached to it (I\'m using YUI):

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

相关标签:
7条回答
  • 2020-12-20 22:10

    You're looking for fireEvent (IE) and dispatchEvent (others).

    For YUI 3 this is all wrapped up nicely in Y.Event.simulate():

    YUI().use("node", function(Y) {
        Y.Event.simulate(document.body, "click", { shiftKey: true })
    })
    
    0 讨论(0)
  • 2020-12-20 22:11

    The inability to simulate a user-click on an arbitrary element is intentional, and for obvious reasons.

    0 讨论(0)
  • 2020-12-20 22:14

    Of course $('Element').click() won't work, but it can if you include jquery, it works well alongside yui.

    As I untestand you need to do the following:

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

    Then call myfunc when something else needs to happen.

    0 讨论(0)
  • 2020-12-20 22:15

    You can declare your function separately.

    function DoThisOnClick () {
    }
    

    Then assign it to onclick event as you do right now, e.g.:

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

    And you can call it whenever you want :-)

    DoThisOnClick ()
    
    0 讨论(0)
  • 2020-12-20 22:22

    In case anyone bumps into this looking for a framework agnostic way to fire any HTML and Mouse event, have a look here: How to simulate a mouse click using JavaScript?

    0 讨论(0)
  • 2020-12-20 22:28

    1) FIRST SOLUTION

    The article http://mattsnider.com/simulating-events-using-yui/ describes how to simulate a click using YAHOO:

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

    As you can see, the function loops over the node and its parents and for each of them gets the list of listeners and calls them.

    2) SECOND SOLUTION

    There is also another way to do it. For example:

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

    where function is used as

    3) THIRD SOLUTION

    Version 2.9 of YUI2 has a better solution: http://yui.github.io/yui2/docs/yui_2.9.0_full/docs/YAHOO.util.UserAction.html

    4) FORTH SOLUTION

    YUI3 has also a better and clean solution: http://yuilibrary.com/yui/docs/event/simulate.html

    0 讨论(0)
提交回复
热议问题