开发者

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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜