1

在“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)反复重定向,就好像初始化输入文本框本身的值的行为正在生成一个即时的“输入”事件。但是,当我将初始输入文本框值从“£”符号更改为字母“A”时,不会发生重复重定向。

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

有没有其他人使用 IE10 体验过这个?如果是这样,谁能解释为什么 IE10 会这样?

4

3 回答 3

2

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

social.msdn.microsoft.com:页面加载时触发的事件 oninput

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

connect.microsoft.com:当输入@value 为非ASCII 时,onInput 事件在加载页面时触发

编辑添加:在第二个链接指向的页面底部,微软似乎没有帮助地回复说他们无法重现所描述的错误,因此可能需要一段时间才能解决问题...

于 2013-05-21T15:25:46.043 回答
0

还有一个仍然开放的错误报告:

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

于 2014-02-23T18:00:20.713 回答
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()

于 2019-02-11T21:59:59.780 回答