Как вызвать Live() click в jquery

У меня интересная ситуация. Мне нужно вызвать живой клик, потому что простой щелчок не работает.

Это то, что у меня есть:

$('.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');, но в режиме live, потому что простой щелчок не работает!

Спасибо!!!!

Ответы

Ответ 1

Лучшим решением было бы поместить ваш обработчик кликов в отдельную функцию.

Затем вы можете вызвать эту функцию как из обработчика live-клика, так и при необходимости вручную вызвать клик.

Ответ 2

У меня была та же проблема при использовании Lightbox2, которая связывает событие click с помощью live(). В моем случае решение было инициировать событие следующим образом:

jQuery**('a[rel^="lightbox"]')**.ready(function () {
jQuery("#myimglink").trigger("click");
})

Как вы видите, я запускал событие только после того, как все изображения, которые используют лайтбокс, готовы. Надеюсь, это поможет всем вам - это мой первый вклад в stackoverflow:).

Ответ 3

Я предполагаю, что проблема, с которой вы сталкиваетесь, заключается в том, что live() и delegate() не привязывают обработчик событий к самому DOM element/jQuery object, но в некотором parent node. live(), например, привяжет обработчик к document.body, который проверяет event.target. Говоря простыми словами, он использует event bubbling, то есть идею live events.

Другими словами, используя live, возможно, будет возможно вызвать событие типа

$(document.body).trigger({ 
   type:   'click',
   target: $('.text')[0]
});

Обновление

к сожалению, это не работает. Я также попытался установить currentTarget и relatedTarget. Где .live() привязывает обработчик? кто-нибудь?

Ответ 4

Поскольку я столкнулся с подобной ситуацией, я нашел решение SLaks совершенно полезным. Однако прикрепление .live("click", handlerFn) и .bind("click", handlerFn) к тем же элементам кажется противоречивым (я не знаю, какие правила приоритета применяются в таком случае). Но он отлично работает, если для триггера используется пользовательское событие вместо "click".

$(".elems").bind("customEvent", handlerFn);
$(".elems").live("click", handlerFn);

$(".elems").trigger("customEvent");

function handlerFn() {
}

Ответ 5

Это другой способ, который работает для меня.

$('#test').live('click', function() {
    alert("It works!");            
});

$('#test')[0].click();

Важная часть здесь:

$('#test')[0].click();

Ответ 6

Я верю, что вы можете просто использовать свой первый пример, поскольку триггер используется только для активации связанного элемента, а не для привязки его.

Итак, когда вы это сделаете:

$('#someElement').live('click',function(){./*..*/});

это то же самое, что

$('#someElement').click(function(){./*..*/}); 

кроме первого, также проверяет новый html на каждый запрос ajax и снова связывается.

так просто:

$('div.class').trigger('click');

и он должен вызывать живые элементы