Defining JavaScript Event Object

2020-03-30 01:02发布

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.

标签: javascript
4条回答
虎瘦雄心在
2楼-- · 2020-03-30 01:37

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楼-- · 2020-03-30 01:37

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

查看更多
▲ chillily
4楼-- · 2020-03-30 01:42

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.

查看更多
可以哭但决不认输i
5楼-- · 2020-03-30 01:45

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.

查看更多
登录 后发表回答