在IE8中访问event.target不引人注意的Javascript [英] Access event.target in IE8 unobstrusive Javascript

查看:119
本文介绍了在IE8中访问event.target不引人注意的Javascript的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下函数在下拉菜单中获取目标元素:

  function getTarget(evt){

var targetElement = null;

//如果是标准浏览器
if(typeof evt.target!='undefined'){
targetElement = evt.target;
}
//否则是IE然后调整语法
else {
targetElement = evt.srcElement;
}

//返回id为< li>悬停在< li>之后的元素或< a>
if(targetElement.nodeName.toLowerCase()=='li'){
return targetElement;
}
else if(targetElement.parentNode.nodeName.toLowerCase()=='li'){

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

不用说,它适用于Firefox,Chrome,Safari和Opera,不在IE8(我也猜到在以前的版本)。
当我尝试使用IE8进行调试时,我收到错误Member not Found:

  targetElement = evt.srcElement; 

以及其他后续错误,但我认为这是关键。
任何帮助将不胜感激。






对不起,由于某种原因格式化是不正确的。 >

这是函数再次

  function getTarget(evt){

var targetElement = null;

//如果它是标准浏览器获取目标
if(typeof evt.target!='undefined'){
targetElement = evt.target;
}
//否则是IE然后适应语法并获取目标
else {
targetElement = evt.srcElement;
}

//返回id为< li>悬停在< li>之后的元素或< a>
if(targetElement.nodeName.toLowerCase()=='li'){
return targetElement;
}
else if(targetElement.parentNode.nodeName.toLowerCase()=='li'){

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

} // end getTarget

解决方案

根据我的经验,您描述的问题与获取事件的位置(窗口或处理程序参数)无关,而是由于事件是否正确提出。例如,如果您有一个文本输入元素,并且在不传递事件对象的情况下调用其onchange方法,则event.srcElement属性将为空。



以下代码来自 Jehiah 是有用的

  function fireEvent(element,event){
if(document.createEventObject){
// dispatch for IE
var evt = document.createEventObject );
return element.fireEvent('on'+ event,evt)
}
else {
// dispatch for firefox + others
var evt = document.createEvent HTMLEvents);
evt.initEvent(event,true,true); // event type,bubbling,cancelable
return!element.dispatchEvent(evt);
}
}

示例调用:

  fireEvent(element,'change'); 


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.


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

解决方案

In my experience, the problem you describe is not related to where the event is obtained (window or handler parameter) but rather due to whether or not the event was raised "properly". For example, if you have a text input element and you call its onchange method without passing in an event object, the event.srcElement property will be null.

The following code from Jehiah is useful

function fireEvent(element,event){
   if (document.createEventObject){
      // dispatch for IE
      var evt = document.createEventObject();
      return element.fireEvent('on'+event,evt)
   }
   else{
      // dispatch for firefox + others
      var evt = document.createEvent("HTMLEvents");
      evt.initEvent(event, true, true ); // event type,bubbling,cancelable
      return !element.dispatchEvent(evt);
   }
}

Example call:

fireEvent(element,'change');

这篇关于在IE8中访问event.target不引人注意的Javascript的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆