我有一个相当简单的 ASP.NET 页面,它呈现一个 HTML 输入(文本框)。在生成的 HTML 中,我将处理程序附加到几个事件,包括 onfocus、onkeypress 和 onkeyup。因为这是针对不支持 addEventListener 的 IE 版本(我无能为力的情况)的解决方案,所以我被迫使用 attachEvent。
对 attachEvent 的典型调用如下 - 为了简洁/清晰起见,我从原文中摘录了此源代码,因此它不完全是有问题的代码:
var hostControl = document.getElementById('mytextbox');
var attachResult = hostControl.attachEvent('onfocus', function(){
hostControl.select();
});
if (!attachResult)
{
alert('Attach failed.');
}
attachResult = hostControl.attachEvent('onblur', function(){
if (hostControl.value=='')
{
alert('Warning - no entry.');
}
});
if (!attachResult)
{
alert('Attach failed.');
}
当我在 IE 调试器中单步执行此代码时,attachEvent 在两个实例中都返回“true”,这应该表明事件附件尝试成功。但是,当我查看调试器中控件的 [Event] 处理程序时,所有事件都显示为“null”,没有附加处理程序。
我尝试过/研究过的事情:
- 我已经阅读了几篇关于 IE 中事件附件变幻莫测的不同文章,所以我似是而非地避免了任何“this”引用。
- 我尝试了一个使用 addEvent 包装器块之一的版本,该包装器块尝试使用 addEventListener(如果可用),即使我知道这将是一个 IE 解决方案。
当我针对 FireFox 尝试该版本时,事件附件通过 addEventListener 正常工作,但在 IE 中使用 attachEvent 失败(attachEvent 仍然返回 true)。
- 然后我选择消除包装器可能引入的任何可能的问题,并直接对控件使用 attachEvent,这将我带到现在的位置。问题仍然存在。
我想我只是忽略了一些非常简单的事情,因为我之前已经毫无困难地连接了一些事件,但是这里的一些东西给了我一个我不认识的曲线球。欣赏额外的眼球,看看我错在哪里。