2

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 suggested 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.

1
  • 2
    I might suggest to use a guide less focused on an ancient browser with historically awful standards support. Commented Feb 20, 2011 at 4:30

4 Answers 4

9

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.

Sign up to request clarification or add additional context in comments.

3 Comments

+1 This is the correct answer. For more info, see quirksmode.org/js/introevents.html
I tried your code and I am getting some error. please would you have a look at updates
@experimentX: This is because you're using the inline onclick. Since W3C browsers don't have a global event object, you need to make sure it gets passed. Try changing your inline handlers to this: onclick="catchevent.call(this,event)" I haven't tested this on all browsers, but I think it should work.
4

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.';
}

3 Comments

This may not be possible. For example, document.getElementById('foo').click = catchevent; - It would be up to the browser whether it gets passed, and this depends on which browser you're in.
i guess you are right, but i assumed FF because experimentX said he used Firefox 3.6.13 on Ubuntu.
anyway everyone was helpful, would you have a look at my updated code please
1

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.

Comments

1

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.