Javascript IE8 addEventListener on change事件在首次单击时不起作用

Javascript IE8 addEventListener on change事件在首次单击时不起作用,javascript,internet-explorer-8,Javascript,Internet Explorer 8,我有一个网站,它有三个无线电输入,并根据输入选择周围html页面的部分将发生变化。除了IE8(当然)之外,一切都很完美。我在这个页面上的问题是,当我点击上面有一个“change”事件监听器的输入时,什么都不会发生,直到第二次点击它,事件才会触发。我知道IE8不处理addEventListeners,但我使用pollyfill来处理所有这些,我使用addEventListeners来处理站点上的大量其他事情,它们工作得很好 第二点要注意的是,如果我将事件侦听器切换到“单击”事件,IE8中的一切都可

我有一个网站,它有三个无线电输入,并根据输入选择周围html页面的部分将发生变化。除了IE8(当然)之外,一切都很完美。我在这个页面上的问题是,当我点击上面有一个“change”事件监听器的输入时,什么都不会发生,直到第二次点击它,事件才会触发。我知道IE8不处理addEventListeners,但我使用pollyfill来处理所有这些,我使用addEventListeners来处理站点上的大量其他事情,它们工作得很好

第二点要注意的是,如果我将事件侦听器切换到“单击”事件,IE8中的一切都可以正常工作。唯一的问题和原因,为什么我不只是切换到'点击'是因为标签。我仍然希望用户仍然能够通过表单进行适当的用户体验

最后,当我在VB for IE8中打开该站点时,该功能(即使有“单击”事件)将无法工作,直到我将其置于调试模式并找到所有polyfill.min.js错误。然后我可以停止调试,然后一切都将按预期工作。我将提供我的错误图片。我不知道原因和原因。我猜可能是为了第三方功能而编写的外部脚本。我还没弄明白

下面是函数的调用方式

下面是调用函数的地方:

function attachToggleReportType (elem) {
    console.log('Trigger attachToggleReportType');
    elem.addEventListener('change', toggleReportType, false);
}
下面是基于事件发生的操作的主要功能

function toggleReportType () {
    console.log('Trigger toggleReportType');
    var reportOptions = document.querySelectorAll('.report'),
        reportIncToggle = document.querySelectorAll('.toggle');
        console.log(this.getAttribute('data-sample-report-link'));
    reportSample({
        href: this.getAttribute('data-sample-report-link'),
        src: this.getAttribute('data-sample-report-image'),
        title: this.getAttribute('data-sample-report-title')
    });

    reportIncToggle.forEach(toggleInclude);
}

所以我找到了解决问题的办法。它并不完美,但目前对我来说效果很好。这是一个非常奇怪的问题,因为在IE8中,我的事件监听器带有一种“更改”类型,它总是有一个点击延迟。因此,无论我点击哪个收音机,事件唯一会触发的时间是我第二次再次点击屏幕上的任何地方。我知道IE8不处理addEventListeners,但我使用了polyfill来处理它。在调试模式下,我也会得到一个polyfill错误,所以我想知道这是否是一个与此相关的问题。不管怎样,我现在解决了这个问题,为现代浏览器加入了一个“更改”事件侦听,然后在IE8中我将其切换到一个“聚焦”事件,一切都能正常工作。我讨厌有两种事件类型的想法,但这是解决此错误的唯一方法。还要注意的是,在第二次单击时,更改事件在IE8中仍然有效,因此尝试检测浏览器是否可以处理此事件类型对我来说不是一个选项。

使用未统一版本的polyfill.js并查看错误的堆栈跟踪可能会有所帮助。