我有一个附加了侦听器的链接(我正在使用YUI):
YAHOO.util.Event.on(Element, 'click', function(){ /* some functionality */});
我希望在不涉及用户点击的另一个场景中发生相同的功能。理想情况下,我可以模拟元素上的“点击”并自动触发功能。我怎么能这样做? 太糟糕了,这不起作用:
$('Element').click()
感谢。
答案 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)
无法模拟用户点击任意元素是故意的,并且有明显的原因。