на jQuery.триггер('Нажмите') не работает

кажется, что я просто не могу понять триггер jQuery ('click')

11 ответов


вам нужно использовать jQuery('#bar')[0].click(); для имитации щелчка мыши по фактическому элементу DOM (не объект jQuery), вместо использования .trigger() метод jQuery.

Примечание: DOM Уровень 2 .click() не работает некоторые элементы в Safari. Вам нужно будет использовать обходной путь.

http://api.jquery.com/click/


это поведение JQuery. Я не уверен, почему он работает таким образом, он только запускает функцию onClick по ссылке.

попробуй:

jQuery(document).ready(function() {
    jQuery('#foo').on('click', function() {
        jQuery('#bar')[0].click();
    });
});

вам просто нужно положить небольшое событие тайм-аута, прежде чем делать .click() вот так:

setTimeout(function(){ $('#btn').click()}, 100);

см. мою демонстрацию:http://jsfiddle.net/8AVau/1/

jQuery(document).ready(function(){
    jQuery('#foo').on('click', function(){
         jQuery('#bar').simulateClick('click');
    });
});

jQuery.fn.simulateClick = function() {
    return this.each(function() {
        if('createEvent' in document) {
            var doc = this.ownerDocument,
                evt = doc.createEvent('MouseEvents');
            evt.initMouseEvent('click', true, true, doc.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
            this.dispatchEvent(evt);
        } else {
            this.click(); // IE Boss!
        }
    });
}

может быть полезно:

код, вызывающий триггер, должен идти после вызывается событие.

например, у меня есть код, который я хочу выполнить при изменении значения #expense_tickets, а также при перезагрузке страницы

$(function() { 

  $("#expense_tickets").change(function() {
    // code that I want to be executed when #expense_tickets value is changed, and also, when page is reload
  });

  // now we trigger the change event
  $("#expense_tickets").trigger("change");

})

в jQuery .trigger('click'); вызовет только событие для запуска этого события, оно также не вызовет действие браузера по умолчанию.

вы можете имитировать ту же функциональность со следующим JavaScript:

jQuery('#foo').on('click', function(){
    var bar = jQuery('#bar');
    var href = bar.attr('href');
    if(bar.attr("target") === "_blank")
    {
        window.open(href);
    }else{
        window.location = href;
    }
});

попробуйте это работает для меня:

$('#bar').mousedown();

jQuery('#foo').on('click', function(){
    window.open(jQuery('#bar').attr('href'), '_blank');
});

Я попробовал два лучших ответа, это не сработало для меня, пока я не удалил "display:none" из моих элементов ввода файла. Затем я вернулся к прежней теме .trigger () также работал в safari для windows.

поэтому заключение не используйте display: none; чтобы скрыть ввод файла, вы можете использовать opacity:0 вместо этого.


технически не ответ на это, но хорошее использование принятого ответа (https://stackoverflow.com/a/20928975/82028) для создания кнопок next и prev для вкладок в полях jQuery ACF:

$('.next').click(function () {
    $('#primary li.active').next().find('.acf-tab-button')[0].click();
});

$('.prev').click(function () {
    $('#primary li.active').prev().find('.acf-tab-button')[0].click();
});

вы не можете имитировать событие click с помощью javascript. в jQuery .trigger() функция запускает только событие с именем "click" на элементе, который вы можете захватить с помощью .on() метод jQuery.