2010-06-04 2 views
18

ich generieren HTML jQuery:Ereignis wird nicht in FireFox definiert, aber ok in Chrome und IE

$("<a />") 
    .append("demo") 
    .click(function() { DemoFunc(event, value.Id) }) 

Das für Chrome und IE8 perfekt funktioniert, aber in FireFox bekam ich einen Fehler: „Ereignis nicht definiert ist ". Ich änderte den Code wie folgt:

.attr("onclick", "DemoFunc(event, " + value.Id + ")") 

Es ist für Firefox funktioniert, aber nicht für Chrome und IE.

DemoFunc = function (e, assocGroupId) { 
    var target = (e.target) ? $(e.target) : $(e.srcElement); 
    .... 
} 

Warum !? Hilfe!!

Antwort

36

In IE und Chrome wird event auf window.event aufgelöst. Firefox verfügt nicht über diese Eigenschaft und stellt stattdessen einer Event-Handler-Funktion ein Ereignis zur Verfügung, indem sie es als Parameter übergibt. jQuery abstrahiert diesen Unterschied für Sie durch einen Ereignisobjektparameter in allen Browsern bietet:

$("<a />") 
    .append("demo") 
    .click(function (evt) { DemoFunc(evt, value.Id) }); 
+0

Vielen Dank, Tim, viel! Du hast meine Zeit gerettet! :-) – podeig

+0

Mit anderen Worten: Stellen Sie sicher, dass "evt" oder was auch immer Sie im Aufruf verwenden, auch im function() -Teil erscheint. Gleiches Problem wie in http://stackoverflow.com/questions/20522887/referenceerror-event-is-not-defined-error-in-firefox – Malachi

1

Wenn Sie Ihren Code um mit dem ursprünglichen Ereignis arbeiten strukturiert haben, anstatt das jQuery Ereignis können Sie evt.originalEvent verwenden, um die native zu verweisen Veranstaltung.