Javascript:模拟链接上的点击

时间:2009-03-16 01:06:54

标签: javascript yui

我有一个附加了侦听器的链接(我正在使用YUI):

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

我希望在不涉及用户点击的另一个场景中发生相同的功能。理想情况下,我可以模拟元素上的“点击”并自动触发功能。我怎么能这样做? 太糟糕了,这不起作用:

$('Element').click()

感谢。

7 个答案:

答案 0 :(得分:9)

您正在寻找fireEvent(IE)和dispatchEvent(其他)。

对于YUI 3,这在Y.Event.simulate()中很好地包裹起来:

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

答案 1 :(得分: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
  }
}

答案 2 :(得分:3)

您可以单独声明您的功能。

function DoThisOnClick () {
}

然后像现在一样将它分配给onclick事件,例如:

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

你可以随时调用它: - )

DoThisOnClick ()

答案 3 :(得分:1)

如果有人碰到这个寻找框架不可知方式来解雇任何HTML和鼠标事件,请查看此处:How to simulate a mouse click using JavaScript?

答案 4 :(得分:0)

1)第一个解决方案

文章http://mattsnider.com/simulating-events-using-yui/介绍了如何使用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;
    }
};

正如您所看到的,该函数循环遍历节点及其父节点,并为每个节点获取侦听器列表并调用它们。

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)解决方案

YUI3还有一个更好,更干净的解决方案:http://yuilibrary.com/yui/docs/event/simulate.html

答案 5 :(得分:-1)

当然$('元素')。click()不起作用,但如果你包含jquery,它可以和yui一起使用。

我不知道你需要做以下事情:

function myfunc(){
//functionality
}

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

然后在需要发生其他事情时调用myfunc。

答案 6 :(得分:-4)

无法模拟用户点击任意元素是故意的,并且有明显的原因。

相关问题