IE attachEvent调用返回true,但处理程序显示“null”

时间:2013-04-11 15:33:20

标签: javascript html internet-explorer dom attachevent

我有一个相当简单的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',没有附加处理程序。

我尝试/研究过的事情:

  • 我已经阅读了几篇关于IE中事件附件变幻莫测的文章,所以我狡猾地避免了任何“这个”引用。
  • 我尝试了一个版本,它使用了一个尝试使用addEventListener的addEvent包装器块,即使我知道这将是一个IE解决方案。

当我针对FireFox尝试该版本时,事件附件通过addEventListener正常工作,但在使用attachEvent的IE中失败(attachEvent仍然返回true)。

  • 然后我选择消除包装器可能引入的任何可能的问题,并直接对控件使用attachEvent,这导致我现在的位置。问题依然存在。

我想我只是简单地忽略了一些非常简单的事情,因为我之前没有遇到任何困难,但是这里有些东西给我带来了一个我不认识的曲线球。欣赏这个额外的眼球,看看我错在哪里。

0 个答案:

没有答案