Vraag Onverwachte toegang tot "event" -variabele via browsers?


Allereerst wil ik zeggen dat ik begrijp dat de onderstaande code een groot probleem is. In het bijzonder, de event parameter wordt niet doorgegeven aan de functie. Wat ik niet begrijp is waarom in de onderstaande code Chrome, Opera, Safari, Firefox en IE alle de behandelen event veranderlijk anders.

$('#eventBtn').on('click', function() {
    console.log(event);
    event.preventDefault();
});

In Chrome, Opera en Safari werkt de bovenstaande code. IE mislukt op de tweede regel en Firefox mislukt onmiddellijk. Voor testdoeleinden heb ik iets meer verfraaid jsFiddle. De uitvoer van het bovenstaande console.log(event) in de verschillende browsers:

Chrome-versie 26.0.1410.64 m
    MouseEvent {dataTransfer: null, toElement: button # superBtn, fromElement: null,         y: 20, x: 33 ...}

Opera versie 12.15
    MouseEvent

Safari versie 6.0.2 (8536.26.17)
    MouseEvent

IE-versie 10.0.9200.16540
    [object MSEventObj]

Firefox-versie 20.0.1
    ReferenceError: event is niet gedefinieerd

Ik was gebeten door deze "functie" van Chrome, Opera en Safari omdat het werkte zoals bedoeld niet als gecodeerd en onverwacht gedrag in andere browsers veroorzaakt. Terwijl IE ook een globale heeft event variabele, in tegenstelling tot de eerdergenoemde browsers, wijst het die variabele niet toe aan de gebeurtenis die momenteel wordt geactiveerd. Firefox heeft geen globale event variabele en dus mislukt zodra event wordt verwezen.

Meestal gebruik ik e voor het representeren van gebeurtenisvariabelen die zoals verwacht in alle browsers op dezelfde manier faalt. Waarom hebben Chrome, Opera en Safari een wereldwijde uitstraling? event variabele die ze op deze manier toewijzen? Is dit gedrag ergens gedocumenteerd? Afgezien van niet gebruiken event voor variabele naamgeving enig advies voor het omgaan met deze "functie"?


12
2018-04-30 18:20


oorsprong


antwoorden:


IE heeft altijd een globaal gegeven event variabel, in tegenstelling tot wat de W3C-normen voorschrijven. De andere browsers doen hetzelfde om achterwaartse compatibiliteit te bieden met websites die zijn ontwikkeld met oude IE-versies in het achterhoofd.

Hoewel IE ook een algemene gebeurtenisvariabele heeft, wijst het in tegenstelling tot de eerdergenoemde browsers die variabele niet toe aan de gebeurtenis die momenteel wordt geactiveerd.

Ik geloof dat het dat doet.


5
2018-04-30 18:23