2009-11-12 8 views
3

J'essaie de simuler un clic sur une balise d'ancrage en utilisant jQuery. J'ai creusé autour de StackOverflow et Google pendant un certain temps et n'ai rien trouvé qui fonctionne sur tous les navigateurs que je suis en train de tester. Jusqu'à présent, je l'ai trouvé ceci:Navigateur convivial pour simuler un clic d'ancrage avec jQuery?

$(document).ready(function() { 
$.fn.fireEvent = function(eventType) { 
    return this.each(function() { 
     if (document.createEvent) { 
      var event = document.createEvent("HTMLEvents"); 
      event.initEvent(eventType, true, true); 
      return !this.dispatchEvent(event); 
     } else { 
      var event = document.createEventObject(); 
      return this.fireEvent("on" + eventType, event) 
     } 
    }); 
}; 

    $('a').fireEvent('click'); 
}); 

Cela déclenche un événement de clic dans Safari, mais pas FireFox ou la version de IE je l'ai testé. Donc, oh les esprits puissants de SO, qu'est-ce que je fais mal? Toute orientation serait grandement appréciée.

+0

Qu'est-ce que vous essayez d'atteindre? Est-ce pour faire en sorte qu'un navigateur suive le lien ou déclenche un autre événement? – jammus

+0

J'essaie d'obtenir le navigateur pour suivre le lien. Cela semble si simpliste, mais je suis venu vide pendant quelques heures, alors j'ai pensé que je l'afficherais ici. –

+0

qu'en est-il de $ ('a'). Click (function() {location.href = this.href}). Click(); ? C'est un peu bête mais ça marche. – jammus

Répondre

3

Cela devrait fonctionner ...

$(function() { 

    fireClick($("a")[0]); 

}); 

function fireClick(elem) { 
    if(typeof elem == "string") elem = document.getElementById(objID); 
    if(!elem) return; 

    if(document.dispatchEvent) { // W3C 
    var oEvent = document.createEvent("MouseEvents"); 
    oEvent.initMouseEvent("click", true, true, window, 1, 1, 1, 1, 1, false, false, false, false, 0, elem); 
    elem.dispatchEvent(oEvent); 
    } 
    else if(document.fireEvent) { // IE 
    elem.click(); 
    }  
} 
+0

Juste essayé ceci. Pas d'amour sur Safari 4 ou FireFox 3.0.11 sur un Mac. –

+0

Toutes les alertes sont déclenchées, mais le clic DOM n'apparaît sur aucun des navigateurs que je suis en train de tester. –

+0

OK J'ai mis à jour ma réponse pour utiliser une fonction que j'ai trouvée en ligne qui implémente la norme W3C pour l'envoi d'événements. S'il vous plaît essayez ceci sur Firefox, parce que je ne peux pas. –

3

Utilisez $('a').click();

+0

Cela déclenchera le gestionnaire d'événements jQuery click, non? Je crois que vous devez accéder à l'élément DOM sous-jacent pour déclencher l'événement correctement. Vois ma réponse. –

+0

C'est la première chose que j'ai essayé. Cela ne fonctionne pas (pour moi) sur Safari 4 ou FireFox 3.0.11. –

+1

-1 Confirmé: cela déclenche uniquement le gestionnaire d'événements affecté à l'ancre via jQuery. Il ne simule pas un utilisateur en cliquant sur le lien. Il ne redirige pas vers le HREF. –

1

J'ai testé ce dans Chrome et Firefox, mais ne dispose pas d'une pratique IE. Cela devrait fonctionner de manière transparente dans la plupart des scénarios.

$('a').live('click.simclick', function(event){ 
    var $a = $(event.target) 
    setTimeout(function(){ 
     if (event.isPropagationStopped()) 
      return 

     $('<form/>') 
      .attr({ 
       method: 'get', 
       target: $a.attr('target'), 
       action: $a.attr('href') 
      }) 
      .appendTo(document.body) 
      .submit() 

      // clean up in case location didn't change 
      .remove() 
    }, 0) 
}) 

// test it 
$('a').eq(0).click() 
0

J'utilise cette approche. Ça semble fonctionner.

$(function() { 
    fireClick($("a")); 
}); 

function fireClick (elem) { 
    window.location = $(elem).attr('href'); 
} 
Questions connexes