Jak sprawić, by event.srcElement działał w Firefoksie i co to oznacza?


80

w witrynie mojej firmy znajduje się stwierdzenie if, które sprawia, że ​​jedna strona internetowa jest niekompatybilna z programem Firefox

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

Skomentowałem warunki instrukcji if i teraz działa z forefoxem. Moje pytanie brzmi, co to jest event.srcElement.getAttribute ("onclick"), czy to ważne, czy spowodowałoby to problemy w przyszłości. czy jest coś podobnego, na które mogę zamienić stan, aby działał w przeglądarce Firefox?

Edytować:

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

2
Szybkie wyszukiwanie w Google „event.srcElement” przyniosło to wyjaśnienie i rozwiązanie .
Wyścigi lekkości na orbicie

Odpowiedzi:


172

srcElementjest własnością zastrzeżoną pochodzącą z IE. Znormalizowana właściwość to target:

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

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

Zajrzyj również na quirksmode.org - Właściwości zdarzenia, aby uzyskać więcej informacji na temat różnych przeglądarek.


Jeśli chodzi o pytanie, co robi:

event.target/ event.srcElementzawiera odniesienie do elementu, w którym eventzostał wywołany. getAttribute('onclick') == nullsprawdza, czy moduł obsługi zdarzenia kliknięcia jest przypisany do elementu za pośrednictwem wbudowanej obsługi zdarzeń .

Czy to ważne? Nie możemy powiedzieć, ponieważ nie wiemy, co ...code..to robi.


Dzięki za ten felix, jednak nadal otrzymuję błąd javascript „Zdarzenie jest niezdefiniowane [Przerwa przy tym błędzie] var target = window.event.target || event.srcElement;” Masz jakiś pomysł, dlaczego?
kod511788465541441

1
@ user521180: We wszystkich innych przeglądarkach zdarzenie nie jest dostępne za pośrednictwem, windowale przekazywane jako pierwszy argument do programu obsługi zdarzeń. Więc potrzebujesz czegoś takiego function yourHandler(event) { event = event || window.event; var target = event.target || event.srcElement; ...}. Lub opublikuj kod tam, gdzie jest on zawarty, jeśli potrzebujesz dodatkowej pomocy.
Felix Kling

Zredagowałem mój oryginalny post, aby uwzględnić całą funkcję
kod511788465541441

1
@FelixKling Myślę, że teraz nie jest obsługiwany tylko z FF Event.srcElement
Alex Char

1
Należy to zaktualizować. Masz rację, @FelixKling. Event.srcElement nie jest teraz obsługiwany tylko w przeglądarce Firefox. developer.mozilla.org/en-US/docs/Web/API/Event/srcElement
SlimPDX

5

W IE obiekt zdarzenia jest już dostępny w obiekcie okna; w przeglądarce Firefox jest przekazywana jako parametr w programie obsługi zdarzeń.

Przykład

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);"/>

Jak zauważyłeś, wywołując funkcję w kodzie HTML, dodaliśmy parametr eventna wypadek, gdyby przeglądarką była Firefox.

Przeczytałem w artykule, że obiekt zdarzenia w IE jest wywoływany, window.eventaw Firefoksie musimy umieścić go jako parametr.

W przypadku potrzeby dołączenia go w kodzie:

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

1
Dzięki za edycję i jestem tu nowy :) Jeszcze raz dziękuję
Marwan

A jeśli już przekazujesz inną wartość do tej funkcji? Czy dodajesz po prostu „evt” jako drugi parametr? Skąd JavaScript wie, który parametr jest obiektem zdarzenia? Czy to musi być pierwszy parametr? czy ostatni?
Vincent,

0

Spróbuj szybko naprawić w następujący sposób:

Uwzględnij w kodzie:

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

i zmienić

event.srcElement.XXXXX to target.XXXXX

rozwiązuje to problem z przeglądarką Firefox.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.