我有一些JS被调用,因为它循环遍历页面上的每个INPUT元素:
if (thisField.addEventListener){ // good browsers
thisField.addEventListener('focus', function(event){toggleHelpText(this,event)}, true);
thisField.addEventListener('blur', function(event){toggleHelpText(this,event)}, false);
} else if (thisField.attachEvent){ // IE
thisField.attachEvent('onfocus',function(event){toggleHelpText(thisField,event)});
thisField.attachEvent('onblur',function(event){toggleHelpText(thisField,event)});
}
在优秀的浏览器中,它可以完成它应该做的事情。它将焦点和模糊事件监听器附加到每个元素,当触发时,将对象和触发它的事件传递给函数'toggleHelpText'。
但是,IE不起作用。在IE中发生的事情是,附加了事件监听器的每个字段都有对象'thisField'仅引用循环中的最后一个对象。换句话说,如果我有3个输入字段,那么好的浏览器会在每个字段上调用一个焦点事件,分别将field1,field2和field3作为'this'。
在IE中,所有3个字段在触发焦点事件时都将field3作为对象传递。
有解决方案吗?
我还尝试了以下语法选项,仅在IE中出错:
thisField.attachEvent('onblur',function(event){toggleHelpText(this,event)});
thisField.attachEvent('onblur',function(this,event){toggleHelpText(thisField,event)});
thisField.attachEvent('onblur',function(this,event){toggleHelpText(this,event)});
答案 0 :(得分:0)
嘿 在IE中,事件处理程序不会将触发事件作为参数提供。你必须通过window.event收集它。
答案 1 :(得分:0)
解决方案:
这是我原来的逻辑:
for loop...
attach events to each item passing object[i]
除了IE之外,它工作得很好,其中相同的obj被传递给每个事件监听器(数组中的最后一个对象)。
修复方法是这样做:
for loop...
call function to attach events passing object[i]
function
attach events to each item passing object[i]
我之前遇到过这个...这是一个关闭问题,对吗?