重定向时重复触发IE10 oninput事件

时间:2013-05-21 12:57:07

标签: javascript-events internet-explorer-10 url-redirection

在“oninput”事件中重定向页面时,我遇到了IE10的奇怪问题(使用Chrome时没有同等问题)。我已经制作了仍然存在问题的最简化的代码版本,如下所示:

<html>

<head>

<script type="text/javascript">
function onChangeInputText()
{
    window.location.href = "oninput_problem.html"; // Back to this page.
}
</script>

</head>

<body>

<input type="text"
    oninput="onChangeInputText()"
    value="£"
    />

</body>

</html>

在使用IE10的Windows 7 PC上,此代码在浏览时(通过双击或通过Apache)反复重定向,就好像初始化输入文本框本身的值的行为正在产生立即的“oninput”事件。但是,当我将初始输入文本框值从“£”符号更改为字母“A”时,不会发生重复重定向。

我首先注意到这个问题是我正在进行的项目的一部分。在这种情况下,用户的输入应该导致页面刷新延迟,当我输入“£”符号时,页面刷新开始反复重定向。正如我所说的,上面的代码是我在试图追踪造成问题的原因时制作的最简化的版本。

有没有其他人使用IE10体验这一点?如果是这样,有人可以解释为什么IE10会这样表现吗?

提前谢谢。

3 个答案:

答案 0 :(得分:2)

我发现以下内容似乎表明这可能是IE10中的一个错误:

social.msdn.microsoft.com: Event oninput triggered on page load

此外,还有一个后续错误报告(在上面链接的页面内):

connect.microsoft.com: onInput event fires on loading the page when input @value is non-ASCII

编辑添加:在第二个链接指向的页面底部,似乎是微软的一个无益的回复,声称他们无法重现所描述的错误,所以它可能在一段时间之前问题是固定的......

答案 1 :(得分:0)

还有一个尚未公开的错误报告:

http://connect.microsoft.com/IE/feedback/de...

答案 2 :(得分:0)

对于可能遇到此问题的任何人,您都可以使用此“类”代替onInput事件。

const getFieldWatcherInstance = (function(watchedElement, onElementValueChange){
        let intervalReference = null;
        let lastValue = null;
        if(!watchedElement instanceof Element) return new Error('watchedElement is not an HTML Element');
        if(typeof onElementValueChange !== 'function') return new Error('onElementValueChange is not a function');
        return {
            toggleFieldWatching : function(){
                if(intervalReference){
                    clearInterval(intervalReference);
                    intervalReference = null;
                }
                else{
                    intervalReference = setInterval(function(){
                        const currentValue = watchedElement.value;
                        if(lastValue !== currentValue){
                            onElementValueChange(currentValue);
                            lastValue = currentValue;
                        }    
                    }, 100);   
                }    
            }
        };    
    });

像这样设置它:

const myInputChangeWatcher = getFieldWatcherInstance(<**insert real element reference here**>, function(newValue){
console.log('The new value is: ' + newValue);
});

在输入的onfocus和onblur事件中调用myInputChangeWatcher.toggleFieldWatching()