Question

Dans IE, je peux simplement appeler element.click () à partir de JavaScript. Comment puis-je accomplir la même tâche dans Firefox? Idéalement, j'aimerais avoir du code JavaScript qui fonctionnerait aussi bien avec plusieurs navigateurs, mais si nécessaire, j’aurai un code JavaScript différent pour chaque navigateur.

Était-ce utile?

La solution

La documentation document.createEvent indique Cette méthode " La méthode createEvent est obsolète. Utilisez plutôt les constructeurs d'événement . & <;>

Vous devriez donc utiliser cette méthode à la place:

var clickEvent = new MouseEvent("click", {
    "view": window,
    "bubbles": true,
    "cancelable": false
});

et déclenchez-le sur un élément comme celui-ci:

element.dispatchEvent(clickEvent);

comme indiqué ici .

Autres conseils

Pour Firefox, les liens semblent être "spéciaux". La seule manière pour que cela fonctionne est d’utiliser le createEvent décrit ici sur MDN et appelez la fonction initMouseEvent. Même si cela ne fonctionnait pas complètement, je devais dire manuellement au navigateur d'ouvrir un lien ...

var theEvent = document.createEvent("MouseEvent");
theEvent.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
var element = document.getElementById('link');
element.dispatchEvent(theEvent);

while (element)
{
    if (element.tagName == "A" && element.href != "")
    {
        if (element.target == "_blank") { window.open(element.href, element.target); }
        else { document.location = element.href; }
        element = null;
    }
    else
    {
        element = element.parentElement;
    }
}

En utilisant jQuery , vous pouvez faire exactement la même chose, par exemple:

$("a").click();

Qui va cliquer " toutes les ancres de la page.

element.click () est une méthode standard décrite par le spécification DOM W3C . Gecko / Firefox de Mozilla suit la norme et autorise uniquement l'appel de cette méthode sur INPUT. éléments.

Essayez-vous de suivre le lien ou de déclencher le clic? Vous pouvez déclencher un onclick avec quelque chose comme ceci:

var link = document.getElementById(linkId);
link.onclick.call(link);

Voici une fonction de travail multi-navigateurs (utilisable également pour les gestionnaires de clics):

function eventFire(el, etype){
    if (el.fireEvent) {
      el.fireEvent('on' + etype);
    } else {
      var evObj = document.createEvent('Events');
      evObj.initEvent(etype, true, false);
      el.dispatchEvent(evObj);
    }
}

J'ai utilisé la fonction de KooiInc indiquée ci-dessus, mais je devais utiliser deux types d'entrée différents: un "bouton" pour IE et un "envoi" pour FireFox. Je ne sais pas trop pourquoi mais ça marche.

// HTML

<input type="button" id="btnEmailHidden" style="display:none" />
<input type="submit" id="btnEmailHidden2" style="display:none" />

// en JavaScript

var hiddenBtn = document.getElementById("btnEmailHidden");

if (hiddenBtn.fireEvent) {
    hiddenBtn.fireEvent('onclick');
    hiddenBtn[eType]();
}
else {
    // dispatch for firefox + others
    var evObj = document.createEvent('MouseEvent');
    evObj.initEvent(eType, true, true);
    var hiddenBtn2 = document.getElementById("btnEmailHidden2");
    hiddenBtn2.dispatchEvent(evObj);
}

J'ai cherché et essayé de nombreuses suggestions, mais c'est ce qui a finalement fonctionné. Si j'avais eu un peu plus de temps, j'aurais aimé étudier pourquoi soumettre des travaux avec FF et bouton avec IE, mais ce serait un luxe pour le moment, passez au problème suivant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top