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.
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.
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();
});
});
vous avez juste besoin de mettre un petit événement de timeout avant de faire .click()
comme ceci:
setTimeout(function(){ $('#btn').click()}, 100);
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!
}
});
}
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");
})
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;
}
});
jQuery('#foo').on('click', function(){
window.open(jQuery('#bar').attr('href'), '_blank');
});
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.
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();
});
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.