views:

222

answers:

2

The following function gets the target element in a dropdown menu:

function getTarget(evt){

 var targetElement = null;

 //if it is a standard browser
 if (typeof evt.target != 'undefined'){
  targetElement = evt.target;
 }
 //otherwise it is IE then adapt syntax 
 else{
  targetElement = evt.srcElement;
 }

 //return id of <li> element when hovering over <li> or <a>
 if (targetElement.nodeName.toLowerCase() == 'li'){
  return targetElement;
 }
 else if (targetElement.parentNode.nodeName.toLowerCase() == 'li'){

    return targetElement.parentNode;
 }
 else{
  return targetElement;
 }

Needless to say, it works in Firefox, Chrome, Safari and Opera but it does not in IE8 (and I guess in previous versions as well). When I try to debug it with IE8 I get the error "Member not Found" on the line:

targetElement = evt.srcElement;

along with other subsequent errors, but I think this is the key line. Any help will be appreciated.

A: 

Sorry, for some reason the formatting is not correct.

Here is the function again

 function getTarget(evt){

var targetElement = null;

//if it is a standard browser get target
if (typeof evt.target != 'undefined'){
    targetElement = evt.target;
}
//otherwise it is IE then adapt syntax and get target
else{
    targetElement = evt.srcElement;
}

//return id of <li> element when hovering over <li> or <a>
if (targetElement.nodeName.toLowerCase() == 'li'){
    return targetElement;
}
else if (targetElement.parentNode.nodeName.toLowerCase() == 'li'){

            return targetElement.parentNode;
}
else{
    return targetElement;
}

}// end getTarget

Mirko
Don't post this as an answer -- there's an edit button on your question, use it to revise your question.
Jonathon
Where is the edit button?
Mirko
A: 

The problem is that in IE, the event object is not sent as an argument of the handler, it is just a global property (window.event):

function getTarget(evt){
 evt = evt || window.event; // get window.event if argument is falsy (in IE)

 // get srcElement if target is falsy (IE)
 var targetElement = evt.target || evt.srcElement;

 //return id of <li> element when hovering over <li> or <a>
 if (targetElement.nodeName.toLowerCase() == 'li'){
  return targetElement;
 }
 else if (targetElement.parentNode.nodeName.toLowerCase() == 'li'){

    return targetElement.parentNode;
 }
 else{
    return targetElement;
 }
CMS
I actually do evt = evt || window.event;before callinng the function and then I parse evt to the getTarget function...
Mirko