jQuery.trigger('click') ne fonctionne pas

il semble que je ne peux pas comprendre la fonction jQuery trigger('click') correctement.

quelqu'un Peut-il me dire pourquoi ce simple code ne fonctionne pas et comment le résoudre?

HTML:

<a id="bar" href="http://stackoverflow.com" target="_blank">Don't click me!</a>
<span id="foo">Click me!</span>

jQuery:

jQuery('#foo').on('click', function(){
    jQuery('#bar').trigger('click');
});

Démo: VIOLON

ce que je veux c'est pouvoir cliquer sur #foo (qui fonctionne bien) et de simuler un clic sur #bar (qui est complètement ignoré sans aucun message d'erreur). Essayé aussi avec le jQuery(document).ready(function(){...}) mais sans succès.

112
demandé sur Pranav C Balan 2014-01-05 05:21:58

11 réponses

vous devez utiliser jQuery('#bar')[0].click(); pour simuler un clic de souris sur L'élément DOM réel (pas l'objet jQuery), au lieu d'utiliser la méthode .trigger() jQuery.

Note: DOM Niveau 2 .click() ne fonctionne pas sur certains éléments dans Safari . Vous aurez besoin d'utiliser une solution de contournement.

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

225
répondu Alex W 2017-05-23 11:47:19

c'est le comportement de JQuery. Je ne sais pas pourquoi cela fonctionne de cette façon, il ne déclenche la fonction onClick sur le lien.

, Essayez:

jQuery(document).ready(function() {
    jQuery('#foo').on('click', function() {
        jQuery('#bar')[0].click();
    });
});
28
répondu Filip Górny 2014-01-05 02:50:55

vous avez juste besoin de mettre un petit événement de timeout avant de faire .click() comme ceci:

setTimeout(function(){ $('#btn').click()}, 100);
19
répondu Ashish Khurana 2016-10-03 10:24:01

voir ma démo: 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!
        }
    });
}
18
répondu Reza Mamun 2014-01-05 01:44:11

peut être utile:

le code qui appelle le déclencheur doit passer après l'événement est appelé.

par exemple, j'ai un code que je veux exécuter quand la valeur de # expense_tickets est changée, et aussi quand la page est rechargée

$(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");

})
13
répondu Albert Català 2016-09-06 13:54:18

le .trigger('click'); de jQuery ne provoquera qu'un événement à déclencher sur cet événement, il ne déclenchera pas non plus l'action par défaut du navigateur.

vous pouvez simuler la même fonctionnalité avec le JavaScript suivant:

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;
    }
});
4
répondu Alexander O'Mara 2014-01-05 01:30:04

essayez ceci qui fonctionne pour moi:

$('#bar').mousedown();
2
répondu Henry 2015-04-05 07:37:51
jQuery('#foo').on('click', function(){
    window.open(jQuery('#bar').attr('href'), '_blank');
});
0
répondu 2pha 2014-01-05 01:31:47

j'ai essayé les deux premières réponses, ça n'a pas marché pour moi jusqu'à ce que j'enlève" display:none " de mes éléments d'entrée de fichier. Puis j'ai repris .trigger () a également fonctionné chez safari Pour windows.

Donc, conclusion, de Ne pas utiliser display:none; pour cacher votre fichier d'entrée , vous pouvez utiliser opacity:0 à la place.

0
répondu Himanshu Saini 2014-10-01 15:43:03

techniquement pas une réponse à cela, mais une bonne utilisation de la réponse acceptée ( https://stackoverflow.com/a/20928975/82028 ) pour créer les boutons next et prev pour les onglets sur les champs ACF jQuery:

$('.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();
});
0
répondu Tisch 2016-07-10 21:44:04

vous ne pouvez pas simuler un événement de clic avec javascript. la fonction .trigger() de jQuery ne lance qu'un événement nommé "click" sur l'élément, que vous pouvez capturer avec la méthode .on() de jQuery.

-2
répondu yachaka 2014-01-05 01:27:04