Frage

In IE, kann ich einfach anrufen element.click () von JavaScript - wie erreichen ich die gleiche Aufgabe in Firefox? Im Idealfall würde Ich mag einige JavaScript haben, die genauso gut Cross-Browser funktionieren würde, aber wenn nötig werde ich verschiedene pro-Browser JavaScript für diese.

War es hilfreich?

Lösung

Die document.createEvent Dokumentation sagt, dass „ Die create Methode ist veraltet. Ereignis Bauer verwenden statt.

So können Sie diese Methode verwenden, sollten stattdessen:

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

und feuern sie an einem Element wie folgt aus:

element.dispatchEvent(clickEvent);

, wie gezeigt hier .

Andere Tipps

Für firefox Links erscheinen "special" zu sein. Der einzige Weg, ich war in der Lage diese Funktion zu erhalten war die create auf MDN hier beschrieben und rufen Sie die initMouseEvent Funktion. Auch die nicht vollständig funktionierte, musste ich manuell den Browser anweisen, einen Link zu öffnen ...

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;
    }
}

Mit jQuery Sie die gleiche Sache genau tun können, zum Beispiel:

$("a").click();

, die alle Anker auf der Seite finden „klicken“.

element.click () ist ein Standardverfahren durch die W3C DOM-Spezifikation . Mozillas Gecko / Firefox folgt dem Standard und erlaubt nur diese Methode auf INPUT aufgerufen werden Elemente.

Versuchen Sie, um tatsächlich den Link zu folgen oder die Onclick auslösen? Sie können einen Onclick mit so etwas wie dies auslösen:

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

Hier ist ein Cross-Browser-Arbeitsfunktion (verwendbar für andere als Klick-Handler auch):

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

habe ich KooiInc die Funktion oben aufgeführt, aber ich hatte zwei verschiedene Eingabetypen verwenden eine ‚Taste‘ für IE und ein ‚Senden‘ für FireFox. Ich bin nicht ganz sicher, warum, aber es funktioniert.

// HTML

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

// in 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);
}

Ich habe suchen und versucht, viele Vorschläge, aber das ist, was Arbeit endete. Wenn ich etwas mehr Zeit, die ich zu untersuchen es mir gewünscht hätte, warum funktioniert mit FF und Button mit IE einreichen, aber das wäre jetzt ein Luxus sein, so auf das nächste Problem.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top