2011-11-28 15 views
6

Ora ci sono un sacco di domande dall'aspetto simile qui, ma mi stavo chiedendo, cosa dovrei fare, se non voglio solo cambiare il location della finestra, ma attivare qualsiasi funzione può essere associata all'evento click, e cambia solo il href se sono ok con esso, o semplicemente reindirizza, se non ci sono ascoltatori.Come si simula l'utente facendo clic su un collegamento in JQuery?

Ad esempio:

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

Devo fare clic sul collegamento con il mouse, non è mai mi porta a href, così appena reindirizzare utente a attr('href') avrebbe cambiato il comportamento previsto della pagina. Inoltre, facendo clic non si applicano solo i collegamenti, ma anche i pulsanti, nel qual caso dovrei inviare il modulo, ecc.

Quindi mi chiedevo, se è possibile emulare clic su un elemento, quindi che tutto il comportamento del browser è esattamente lo stesso, come se si cliccasse con il mouse?

Non ci possono essere ascoltatori legati a un collegamento.

Esempio:

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

Questo non vi porterà a Google, voglio fargli fare.

Aggiornamento: .click() non funziona. trigger('click') anche. preventDefault non ha nulla a che fare con questo

+0

http://stackoverflow.com/questions/809038/how-can- i-manual-fire-an-event-that-i-wired-up-using-jquery quando si .click(), quindi utilizzare .PreventDefault() –

+0

Hai provato la funzione jquery live()? http://api.jquery.com/live/ – wasimbhalli

risposta

13

In IE, è possibile chiamare .click() sull'elemento, ma per i browser standard è necessario simulare l'evento di clic creando un evento del mouse nativo e quindi utilizzare dispatchEvent per attivarlo.

ho riassunto il tutto in questo 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 
     } 
    }); 
} 

Ora, basta chiamare:

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

Funziona perfettamente, grazie mille! – Fluffy

+0

+1 da parte mia. Sto cancellando la mia risposta, poiché fondamentalmente è la stessa cosa. – Tomalak

+1

ho migliorato (spero) a questo: '\t $ .fn.simulateClick = function() { \t \t if ('CreateEvent' nel 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, false, false, false, false, 0, null); \t \t \t ritorno this.each (function() { \t \t \t \t this.dispatchEvent (EVT); \t \t \t}); \t \t} \t \t altro \t \t \t ritorno this.each (function() { \t \t \t \t this.click(); // IE \t \t \t}); \t}; ' – user2173353

0

Sì, molto semplice:

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

questo sarà emulare un clic dell'utente.

+1

Attiverà solo gli ascoltatori associati all'evento click (se presente) - non reindirizzerà l'utente, a meno che uno degli ascoltatori non lo faccia - e che sia diverso da un clic del mouse – Fluffy

+0

Sì, hai ragione :). Dalla spiegazione fornita sono passato dal presupposto che le sue funzioni avevano quegli ascoltatori. – Nealv

-1

Non ho davvero quello che vuoi fare. con questo:

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

si può fermare il comportamento predefinito dell'evento (in questo caso, il reindirizzamento a a.attr ('href')). È quindi possibile eseguire qualsiasi attività desiderata e quindi reindirizzare manualmente l'utente.

È questo quello che stai cercando?

Se si desidera attivare l'evento click, basta fare

a.click(); 
+0

'click' non attiverà l'evento click nativo. – Fluffy

2

Prova a[0].click();

Questo eseguirà il metodo dell'elemento DOM click invece di innescare l'evento.

+0

Funziona alla grande in Firefox, ti capita di sapere se è supportato correttamente in altri browser? – Fluffy

+0

Questo non funziona in WebKit, è necessario creare manualmente l'evento. – David

Problemi correlati