как вызвать Live () нажмите в jquery - PullRequest
13 голосов
/ 30 июня 2010

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

Вот что у меня есть:

$('.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 ]

10 голосов
/ 30 июня 2010

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

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

3 голосов
/ 03 сентября 2011

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

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

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

2 голосов
/ 30 июня 2010

Полагаю, проблема в том, что 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() привязывает обработчик?кто-нибудь? * * 1023

0 голосов
/ 18 декабря 2014

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

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

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

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

$('#test')[0].click();
0 голосов
/ 04 марта 2011

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

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

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

function handlerFn() {
}
0 голосов
/ 30 июня 2010

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

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

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

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

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

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

так что просто сделайте:

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

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

...