在“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会这样表现吗?
提前谢谢。
答案 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)
还有一个尚未公开的错误报告:
答案 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()