2011-11-28 6 views
6

Ahora hay muchas preguntas parecidas aquí, pero me preguntaba, ¿qué debo hacer si no solo quiero cambiar el location de la ventana, sino también desencadenar las funciones que puedan estar relacionadas con el evento click, y solo cambie el href si están de acuerdo con él, o simplemente redireccione, si no hay oyentes.¿Cómo simulo que un usuario haga clic en un enlace en JQuery?

Por ejemplo:

var a = $('.edithost'); 
a.click(function() {return false;}); 

¿Debo haga clic en el enlace con el ratón, nunca me lleva a la href, por lo que sólo redirigir al usuario attr('href') cambiaría el comportamiento previsto de la página. Además, hacer clic se aplica no solo a los enlaces, sino también a los botones, en cuyo caso tendría que enviar el formulario, etc.

Me preguntaba si es posible emular haciendo clic en un elemento, por lo que todo el comportamiento del navegador es exactamente el mismo, como si se hiciera clic con el mouse?

No puede haber oyentes vinculados a un enlace.

Ejemplo:

var a = $('<a href="google.com">google</a>'); 
a.click(); 
a.trigger('click'); 

Esto no le llevará a Google, quiero hacer que haga.

Actualización: .click() no funcionará. trigger('click') también. preventDefault no tiene nada que ver con esto

+0

http://stackoverflow.com/questions/809038/how-can- i-manualmente-fuego-un-evento-que-i-wired-up-using-jquery cuando .click() luego usa .PreventDefault() –

+0

¿Intentó la función jquery de live()? http://api.jquery.com/live/ – wasimbhalli

Respuesta

13

En IE, puede llamar al .click() en el elemento, pero para los navegadores estándar debe simular el evento click creando un evento de mouse nativo y luego usar dispatchEvent para activarlo.

que resumió todo en este jQuery 'plug-in':

$.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 
     } 
    }); 
} 

Ahora, a llamarlo:

$('.edithost').simulateClick(); 
+0

¡Funciona perfectamente, gracias muchísimo! – Fluffy

+0

+1 de mí. Estoy borrando mi respuesta, ya que básicamente es lo mismo. – Tomalak

+1

he mejorado (espero) a esto: ' \t $ .fn.simulateClick = function() { \t \t si ('createEvent' en el documento) { \t \t \t var doc = documento; \t \t \t var evt = doc.createEvent ('MouseEvents'); \t \t \t evt.initMouseEvent ('click', true, true, doc.defaultView, 1, 0, 0, 0, 0, falso, falso, falso, falso, 0, nulo); \t \t \t retorno this.each (function() { \t \t \t \t this.dispatchEvent (evt); \t \t \t}); \t \t} \t \t demás \t \t \t retorno this.each (function() { \t \t \t \t this.click(); // IE \t \t \t}); \t}; ' – user2173353

0

Sí, muy simple:

$('#YourSelector').click(); 

esto emular un clic del usuario.

+1

Simplemente activará oyentes destinados a hacer clic en evento (si lo hay) - no redireccionará al usuario, a menos que uno de los oyentes lo haga - y eso es diferente de un clic del mouse – Fluffy

+0

Sí, tienes razón :). De la explicación dada, pasé de la suposición de que sus funciones tenían esos oyentes. – Nealv

-1

Realmente no entiendo lo que quiere hacer. con esto:

a.click(function(e){ 
e.preventDefault(); 
}); 

puede detener el comportamiento predeterminado del evento (en este caso, volver a dirigir a a.attr ('href')). Luego puede realizar cualquier tarea que desee y luego redirigir al usuario manualmente.

¿Esto es lo que estás buscando?

Si desea activar el evento clic, simplemente hacer

a.click(); 
+0

'click' no activará el evento click nativo. – Fluffy

2

Trate a[0].click();

Esto ejecutará el método del elemento DOM click en lugar de desencadenar el evento.

+0

Funciona muy bien en Firefox, ¿sabes si es compatible con otros navegadores? – Fluffy

+0

Esto no funciona en WebKit, necesita crear el evento manualmente. – David

Cuestiones relacionadas