hinzufügen von Ereignis als parameter innerhalb der Funktion mit addEventListener (funktioniert nicht in FF/IE). Javascript
<html>
<head>
<title>FML</title>
<script type="text/javascript">
function function1(e, div) {
div.innerHTML="this works"
document.getElementById('myspan').innerHTML= 'x-pos on click: ' + e.clientX
div.addEventListener("mousemove", function(){test(event, this)}, true);
}
function test(e, div) {
div.innerHTML+='<br/>so does this'
//This doesn't work. Can't add event as a parameter to function that has to be executed when using addEventListener
document.getElementById('myspan2').innerHTML= 'y-pos on move: ' + e.clientY
}
</script>
</head>
<body>
<span id="myspan"> </span>
<span id="myspan2"> </span>
<div style="width:100px;height:100px;background-color:blue;overflow:hidden;" onclick="function1(event, this)">
</body>
</html>
Klicken Sie auf das Blaue div.
Möchte ich hinzufügen, dass das Ereignis "mouseover", haben es ausgeführt, die test()-Funktion enthalten folgende Parameter: dieses Ereignis
Wenn die Funktion test(e, div) wird aufgerufen, ich bekomme immer ein "event" nicht definiert ist" Fehler in firefox und IE, obwohl ironischerweise es funktioniert perfekt in Chrome und Safari.
Möglichkeit, die ich hinzufügen können, die event-parameter durch die Verwendung von addEventListener? Kann ich es auf der Arbeit mit Fenster.event in chrome und safari, aber dies ist das genaue setup, was ich will. Ich habe schon gegoogelt und trial/erroring für eine Weile jetzt, ohne Erfolg... also FML :/Irgendwelche Tipps/Hinweise/... außerdem Schießen mir in den Kopf?
Ich weiß, jquery würde wahrscheinlich lösen, aber ich will mit javascript vertraut, bevor Sie die Migration zu jQuery. Oder sollte ich migrieren überhaupt?
Dank und cheers,
p.
InformationsquelleAutor Pascalculator | 2011-09-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, natürlich bekommen Sie auch "- Ereignis ist nicht definiert" ! Wenn die
mousemove
Ereignis-Trigger haben, Ihre event-handler aufgerufen wird:Es gibt zwei Möglichkeiten zum erreichen der Veranstaltung Informations-Objekt. Entweder es wird an den event-handler als argument, oder es kann gefunden werden in
window.event
.Angenommen, der zweite Fall hält. Da es keine lokale variable mit dem Namen
event
in Ihrer Funktion, noch gibt es eine solche variable infunction1
aufruft, sucht der browser, ob es eineevent
definiert das Globale Objekt. In JavaScript ist das Globale Objekt aufgerufen wirdwindow
, so dass Ihre Funktion so interpretiert, dassund es funktioniert.
Jedoch, wie ich schon gesagt habe, in einigen Browsern, die event-Informationen übergeben wird, in das argument. Damit Ihr event handler wollte wohl so Aussehen:
sonst die
event
übergebentest()
wäre nicht definiert. Also, das ist wie eine cross-browser-handler:Das zweite problem ist, dass
addEventListener()
funktioniert nicht in älteren IEs (es funktioniert im IE9, obwohl). Für ältere IEs haben, müssen Sie auf eine ähnliche Funktion namensattachEvent()
. Oder, wenn Sie nur bringen Sie einen handler, tun Sie es der einfache WegKann der Ereignis-listener entfernt werden mit diesem Ansatz? Ansonsten, was ist der Punkt, der Verschachtelung eine benannte Funktion innerhalb einer anonymen Funktion, die in dieser Weise?
InformationsquelleAutor Imp
In einigen Browsern wie Firefox, die Veranstaltung muss als parameter übergeben werden, so müssen Sie ersetzen Sie diesen code
mit diesem
Vergleichen Sie sorgfältig die zwei Zeilen code, und beachten Sie die Veranstaltung Eigentum übergeben als parameter der Funktion Hinzugefügt, in der zweiten Reihe.
für alte IE ver
attachEvent()
verwendet werden;Beachten Sie, dass attachEvent wurde ersetzt in modernen standard-js mit addEventListener und jetzt fast alle modernen browser unterstützen.
Hier
http://caniuse.com/#feat=addeventlistener
ist möglich, siehe Kompatibilitäts-Tabelle.
InformationsquelleAutor willy wonka