J'ai de la difficulté à comprendre comment simuler un clic de souris avec JQuery. Quelqu'un peut-il s'il vous plaît informer moi de ce que je fais mal.
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
lorsque je clique sur le bouton #foo, je veux simuler un clic sur #bar, mais lorsque j'essaie, rien ne se passe. J'ai aussi essayé jQuery(document).ready(function(){...})
mais sans succès.
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.
Remarque: DOM niveau 2 .click()
ne fonctionne pas sur certains éléments de Safari . Vous devrez utiliser une solution de contournement.
Vous avez juste besoin de mettre un petit événement timeout avant de faire .click()
comme ceci:
setTimeout(function(){ $('#btn').click()}, 100);
C'est le comportement de JQuery. Je ne suis pas sûr de savoir pourquoi cela fonctionne de cette façon, cela ne fait que déclencher la fonction onClick sur le lien.
Essayer:
jQuery(document).ready(function() {
jQuery('#foo').on('click', function() {
jQuery('#bar')[0].click();
});
});
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 devrait aller after l'événement est appelé.
Par exemple, je souhaite exécuter un code lorsque la valeur de #expense_tickets est modifiée et également lorsque 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");
})
la fonction .trigger('click');
de jQuery ne provoquera qu'un événement à déclencher sur cet événement, elle ne déclenchera pas l'action du navigateur par défaut également.
Vous pouvez simuler la même fonctionnalité avec le code 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;
}
});
Essayez ceci qui fonctionne pour moi:
$('#bar').mousedown();
Techniquement, pas une réponse à cela, mais un bon usage de la réponse acceptée ( https://stackoverflow.com/a/20928975/82028 ) pour créer des boutons next et prev pour les onglets des champs 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();
});
J'ai essayé les deux premières réponses, cela ne fonctionnait pas jusqu'à ce que je supprime "display: none" de mes éléments d'entrée de fichier. Ensuite, je suis revenu à .trigger () cela fonctionnait également au safari pour windows.
Donc conclusion, N'utilisez pas display: none; pour cacher votre entrée dans le fichier, vous pouvez utiliser l'opacité: 0 à la place.