Wie kann ich event.srcElement in Firefox zum Laufen bringen und was bedeutet das?

80

Auf der Website meines Unternehmens befindet sich eine if-Anweisung, die eine Webseite mit Firefox nicht kompatibel macht

if(event.srcElement.getAttribute("onclick") == null){ 
...code..
document.mainForm.submit();
}

Ich habe die if-Anweisungsbedingungen auskommentiert und jetzt funktioniert es mit forefox. Meine Frage ist, was ist event.srcElement.getAttribute ("onclick"), ist es wichtig, würde es in Zukunft Probleme verursachen. Gibt es auch etwas Ähnliches, durch das ich die Bedingung ersetzen kann, damit es auf Firefox funktioniert?

Bearbeiten:

 function gotoRDManagerPT(PTId, bDDetailId) {
        if(!proceed()) return false;
        var target = event.target || event.srcElement; 
        if(event.target.getAttribute("onclick") == null) { 
            document.mainForm.displayRDManagerPT.value = "true";
            document.mainForm.PTId.value = PTId;
            document.mainForm.bDDetailId.value = bDDetailId;
            document.mainForm.submit();
        }
    }
code511788465541441
quelle
2
Eine schnelle Google-Suche nach "event.srcElement" ergab diese Erklärung und Lösung .
Leichtigkeitsrennen im Orbit

Antworten:

172

srcElementist Eigentum, das ursprünglich aus dem Internet Explorer stammt. Die standardisierte Eigenschaft ist target:

var target = event.target || event.srcElement;

if(target.onclick == null) { // shorter than getAttribute('onclick')
    //...
    document.mainForm.submit();
}

Auch einen Blick auf quirksmode.org - Ereigniseigenschaften für mehr Cross - Browser - Informationen.


In Bezug auf die Frage, was es tut:

event.target/ event.srcElemententhält einen Verweis auf das Element, auf das eventdas angehoben wurde. getAttribute('onclick') == nullÜberprüft, ob dem Element über die Inline-Ereignisbehandlung ein Klickereignishandler zugewiesen ist .

Ist es wichtig? Wir können nicht sagen, weil wir nicht wissen, was der ...code..tut.

Felix Kling
quelle
Vielen Dank für diesen Felix, aber ich erhalte immer noch einen Javascript-Fehler "Ereignis ist undefiniert [Bei diesem Fehler brechen] var target = window.event.target || event.srcElement;" Irgendeine Idee warum?
Code511788465541441
1
@ user521180: In allen anderen Browsern ist das Ereignis nicht über das verfügbar, wird windowaber als erstes Argument an den Ereignishandler übergeben. Also brauchst du so etwas wie function yourHandler(event) { event = event || window.event; var target = event.target || event.srcElement; ...}. Oder posten Sie den Code, in dem dies enthalten ist, wenn Sie weitere Hilfe benötigen.
Felix Kling
Ich habe meinen ursprünglichen Beitrag so bearbeitet, dass er die gesamte Funktion enthält
Code511788465541441
1
@FelixKling Ich denke, jetzt wird nicht nur von FF Event.srcElement
Alex Char
1
Dies sollte aktualisiert werden. Du hast recht, @FelixKling. Event.srcElement wird jetzt nur in Firefox nicht mehr unterstützt. developer.mozilla.org/en-US/docs/Web/API/Event/srcElement
SlimPDX
5

Im IE ist das Ereignisobjekt bereits im Fensterobjekt verfügbar. In Firefox wird es als Parameter im Ereignishandler übergeben.

Beispiel

JavaScript:

function toDoOnKeyDown(evt)

{

    //if window.event is equivalent as if thie browser is IE then the event object is in window
    //object and if the browser is FireFox then use the Argument evt

    var myEvent = ((window.event)?(event):(evt));
    //get the Element which this event is all about 

    var Element = ((window.event)?(event.srcElement):(evt.currentTarget));
    //To Do -->

}

HTML:

<input type="text" id="txt_Name" onkeydown="toDoOnKeyDown(event);"/>

Wie Sie feststellen, haben wir eventbeim Aufrufen der Funktion im HTML-Code einen Parameter hinzugefügt, falls der Browser Firefox ist.

Ich habe in einem Artikel gelesen, dass das Ereignisobjekt im IE aufgerufen wird window.eventund wir es in Firefox als Parameter einfügen müssen.

Falls Sie es im Code anhängen müssen:

document.getElementById('txt_Name').onkeydown = function(evt) {
    var myEvent = ((window.event)?(window.event):(evt));


    // get the Element which this event is all about 

    var Element = ((window.event)?(event.srcElement):(evt.currentTarget));
    // To Do -->
};
Marwan
quelle
1
Vielen Dank für die Bearbeitung Ich bin gerade neu hier :) Danke nochmal
Marwan
Was ist, wenn Sie dieser Funktion bereits einen anderen Wert übergeben? Fügen Sie einfach "evt" als zweiten Parameter hinzu? Woher weiß Javascript dann, welcher Parameter das Ereignisobjekt ist? Muss es der erste Parameter sein? oder der letzte?
Vincent
0

Versuchen Sie eine schnelle Lösung wie folgt:

In Code aufnehmen:

let target = event.target || event.srcElement;

und ändern

event.srcElement.XXXXX to target.XXXXX

Dies löst das Problem mit Firefox.

Pankaj Shrivastava
quelle