我有一段 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)});