Defining JavaScript Event Object
Why am I getting an error for this piece of code?:
function catchevent()
{
eventSrcID=(event.srcElement)?event.srcElement.id:'undefined';
eventtype=event.type;
status=eventSrcID+' has received a '+eventtype+' event.';
}
Firefox says that event
is not defined. Actually, this is copied from here and it clearly says that it is for IE5. I use Firefox 3.6.13 on Ubuntu.
My Question is not why it doesn't work on my browser. Instead, is there a way to define event
object, as sugges开发者_开发百科ted by the link, that would work for my browser?
UPDATE
Why isn't this working
<html>
<head>
<script>
function catchevent( e ) {
// reference the proper event object
var e = e || window.event;
// reference the proper target
var srcElem = e.target || e.srcElement; //line no 9
// get the id of the target
var eventSrcID = srcElem.id;
alert(eventSrcID);
}
</script>
</head>
<body>
<a id="link1" href="#" onclick="catchevent()">link1</a>
<a id="link2" href="#" onclick="catchevent()">link2</a>
<a id="link3" href="#" onclick="catchevent()">link3</a>
</body>
</html>
For this i am still getting error on line no 9
e is undefined
[Break On This Error] var srcElem = e.target || e.srcElement;
Now how do I need to pass event
object on catchevent()
or is there some mistake? please suggest.
In Firefox and other W3C compliant browsers, the handler function will receive an event object as an argument to the function.
IE uses a global event
object.
Here's a cross browser solution for your code.
function catchevent( e ) {
// reference the proper event object
var e = e || window.event;
// reference the proper target
var srcElem = e.target || e.srcElement;
// get the id of the target
var eventSrcID = srcElem.id;
// get the event type
var eventtype = e.type;
// create the status string
var status = eventSrcID + ' has received a ' + eventtype + ' event.';
}
You'll notice I used the var
keyword when creating variables. You should do this, otherwise you're creating global variables.
Also note that the keyword this
will be a reference to the element to which the handler was assigned.
you forgot to pass event in parameters.
function catchevent(event)
{
eventSrcID=(event.srcElement)?event.srcElement.id:'undefined';
eventtype=event.type;
status=eventSrcID+' has received a '+eventtype+' event.';
}
In Firefox, the first param passed to a handler is the event. So a cross browser piece of code would check for a param and use it if present. If not present, it would default to window.event, the IE way.
The event object is a global variable in internet explorer. (Actually a property of the global window variable)
Firefox is simply a different design, and event is not a global variable in firefox. Instead, it is passed into the function (so you would need to change catchEvent() to accept a parameter:
function catchEvent(event){
Take a look at this artice because that is not the only problem you'll face with the event model:
http://www.quirksmode.org/js/introevents.htmlQuirksmode article
精彩评论