我有一个有趣的情况。我需要触发实时点击,因为简单点击不起作用。
这就是我所拥有的:
$('.text').trigger('click');
但我需要这样的事情:
$('.text').trigger(live('click' ...));
或解决此问题的方法。
这是我的代码:
$(".Sets a.largeImage").fancybox({
'onComplete': function(){
return errorimage(myurl);
}
});
function errorimage(url) {
$("#fancybox-img").live('click', function(){
$('.lightbox:first').trigger('click');
});
$('#fancybox-img').trigger('click');
}
我的想法是,我想触发$('.lightbox:first').trigger('click');
,但是在实时模式下,因为简单点击不起作用!
谢谢!!!!
答案 0 :(得分:10)
最好的解决方案是将您的点击处理程序放在一个单独的函数中。
然后,您可以从实时点击处理程序以及手动触发点击时调用此功能。
答案 1 :(得分:3)
使用Lightbox2时遇到同样的问题,Lightbox2使用live()绑定click事件。 在我的情况下,解决方案是触发这样的事件:
jQuery**('a[rel^="lightbox"]')**.ready(function () {
jQuery("#myimglink").trigger("click");
})
正如您所看到的,只有在使用灯箱的所有图像都准备就绪后才会触发事件。希望它能帮到你们所有人 - 这是我对stackoverflow的第一次贡献:)。
答案 2 :(得分:2)
我猜你遇到的问题是,live()
和delegate()
没有将事件处理程序绑定到DOM element
/ jQuery object
本身,但在某些情况下parent node
。例如,live()
会将处理程序绑定到检查document.body
的{{1}}。简单来说,它使用了event.target
,这就是event bubbling
的想法。
换句话说,使用live,可能会触发像
这样的事件live events
<强>更新强>
不幸的是,这似乎不起作用。我还尝试设置$(document.body).trigger({
type: 'click',
target: $('.text')[0]
});
和currentTarget
。 relatedTarget
将处理程序绑定到哪里?有人?
答案 3 :(得分:0)
当我遇到类似情况时,我发现SLaks的解决方案非常有用。但是,将.live(“click”,handlerFn)和.bind(“click”,handlerFn)附加到相同的元素似乎是冲突的(我不知道在这种情况下适用哪些优先规则)。 但是如果您使用自定义事件而不是“单击”触发器,它就可以正常工作。
$(".elems").bind("customEvent", handlerFn);
$(".elems").live("click", handlerFn);
$(".elems").trigger("customEvent");
function handlerFn() {
}
答案 4 :(得分:0)
这是另一种适合我的方式。
$('#test').live('click', function() {
alert("It works!");
});
$('#test')[0].click();
这里的重要部分是:
$('#test')[0].click();
答案 5 :(得分:-4)
我相信你可以使用你的第一个例子,因为触发器仅用于激活绑定元素,而不是绑定它。
所以当你做的时候:
$('#someElement').live('click',function(){./*..*/});
这与
相同$('#someElement').click(function(){./*..*/});
除了第一个还检查每个ajax请求的新html并再次绑定。
所以就这样做:
$('div.class').trigger('click');
它应该触发实时元素