如何在jquery中触发Live()单击

时间:2010-06-30 13:48:03

标签: jquery triggers live

我有一个有趣的情况。我需要触发实时点击,因为简单点击不起作用。

这就是我所拥有的:

$('.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');,但是在实时模式下,因为简单点击不起作用!

谢谢!!!!

6 个答案:

答案 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] }); currentTargetrelatedTarget将处理程序绑定到哪里?有人?

答案 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');

它应该触发实时元素