javascript - evento - jQuery.trigger(''clic'') no funciona
jquery this click (11)
Parece que simplemente no puedo entender la función de jQuery trigger (''clic'') correctamente.
¿Puede alguien decirme por qué este simple código no funciona y cómo solucionarlo?
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'');
});
Demostración: FIDDLE
Lo que quiero es poder hacer clic en #foo (que funciona bien) y simular un clic en #bar (que se ignora por completo sin ningún mensaje de error). Probé también con jQuery(document).ready(function(){...})
pero sin éxito.
Este es el comportamiento de JQuery. No estoy seguro de por qué funciona de esta manera, solo activa la función onClick en el enlace.
Tratar:
jQuery(document).ready(function() {
jQuery(''#foo'').on(''click'', function() {
jQuery(''#bar'')[0].click();
});
});
He intentado las dos respuestas principales, no funcionó para mí hasta que eliminé "display: none" de los elementos de entrada de mi archivo. Luego volví a .trigger () también funcionó en safari para Windows.
Así que conclusión, No use pantalla: ninguno; para ocultar su entrada de archivo , puede usar opacity: 0 en su lugar.
Necesita usar jQuery(''#bar'')[0].click();
para simular un clic del mouse en el elemento DOM real (no el objeto jQuery), en lugar de usar el método jQuery .trigger()
.
Nota: DOM Level 2 .click()
no funciona en algunos elementos en Safari . Deberá usar una solución alternativa.
No puede simular un evento de clic con javascript. La función jQuery .trigger()
solo .trigger()
un evento llamado "clic" en el elemento, que puede capturar con el .on()
.
Prueba esto que funciona para mí:
$(''#bar'').mousedown();
Puede ser útil:
El código que llama al Trigger debe ir después de que se llame al evento.
Por ejemplo, tengo un código que quiero que se ejecute cuando se cambia el valor de #expense_tickets, y también, cuando la página se recarga
$(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");
})
Solo tiene que poner un pequeño evento de tiempo de espera antes de hacer .click()
esta manera:
setTimeout(function(){ $(''#btn'').click()}, 100);
Técnicamente no es una respuesta a esto, sino un buen uso de la respuesta aceptada ( https://.com/a/20928975/82028 ) para crear los botones next y prev para las pestañas en los campos de 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();
});
Ver mi demo: 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!
}
});
}
jQuery''s .trigger(''click'');
solo causará que se desencadene un evento en este evento, tampoco activará la acción predeterminada del navegador.
Puede simular la misma funcionalidad con el siguiente 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;
}
});
jQuery(''#foo'').on(''click'', function(){
window.open(jQuery(''#bar'').attr(''href''), ''_blank'');
});