我有一个相当简单的ASP.NET页面,它呈现HTML输入(文本框)。在生成的HTML中,我将处理程序附加到多个事件,包括onfocus,onkeypress和onkeyup。因为这是一个针对IE版本的解决方案,它不支持addEventListener(我无能为力的情况),我被迫使用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',没有附加处理程序。
我尝试/研究过的事情:
当我针对FireFox尝试该版本时,事件附件通过addEventListener正常工作,但在使用attachEvent的IE中失败(attachEvent仍然返回true)。
我想我只是简单地忽略了一些非常简单的事情,因为我之前没有遇到任何困难,但是这里有些东西给我带来了一个我不认识的曲线球。欣赏这个额外的眼球,看看我错在哪里。