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 経由で) 参照すると、入力テキスト ボックス自体の値を初期化する行為が即時の「oninput」イベントを生成しているかのように繰り返しリダイレクトされます。ただし、最初の入力テキスト ボックスの値を「£」記号から文字「A」に変更すると、リダイレクトが繰り返されません。

私が取り組んでいるプロジェクトの一環として、この問題に最初に気付きました。その場合、ユーザーの入力によってページの更新が遅延し、「£」記号を入力したときにリダイレクトが繰り返し開始されます。私が言うように、上記のコードは、問題の原因を追跡するために作成した最も簡素化されたバージョンです。

IE10を使用してこれを経験した人はいますか? もしそうなら、誰でもIE10がこのように振る舞う理由を説明できますか?

4

3 に答える 3

2

これが IE10 のバグである可能性があることを示す次のようなものを見つけました。

social.msdn.microsoft.com: ページの読み込み時に発生する oninput イベント

また、フォローアップのバグ レポートがあります (上記のリンク先のページ内)。

connect.microsoft.com: 入力 @value が非 ASCII の場合、ページの読み込み時に onInput イベントが発生する

追加するために編集: 2 番目のリンクが指すページの下部に、説明されているバグを再現できないという Microsoft からの役に立たない返信と思われるものがあるため、問題が修正されるまでにはしばらく時間がかかる可能性があります。 ...

于 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 に答える