0

私は、jQueryを使って時限付きGUI更新ルーチンを実行すると、IE8でテキスト入力内のカーソルがちらつくことに気付きました。IE8のテキスト入力でカーソルがちらつくのを防ぐ方法は?

私はおそらく肩をすくめて動くはずです...それは明らかに世界の終わりではなく、すべてうまくいくなどですが、何が起こっているのが不思議です。

フリッカ:

var $target = $("#timer"), 
    timeRemaining = 9999; 

(function timer() { 
    timeRemaining = timeRemaining - 1; 
    $target.text(timeRemaining); 
    setTimeout(timer, 30); 
})(); 

ないのちらつき:

var target = document.getElementById("timer"), 
    timeRemaining = 9999; 

(function timer() { 
    timeRemaining = timeRemaining - 1; 
    target.innerHTML = timeRemaining; 

    setTimeout(timer, 30); 
})(); 

私はそこにjQueryを使用した場合、追加のオーバーヘッドがある...しかし、上記のように、セレクタはかなり効率的であるという印象の下にあった実現しています。

だから、何ができますか?

FWIW、ここに生き例:

http://jsfiddle.net/PrrE2/(jQueryのを使用して - これは点滅)

http://jsfiddle.net/PrrE2/2/を(昔ながらの」のJSを使用して - 点滅しません)

答えて

1

私の推測では、問題がであるということですtextメソッドの使用。これを呼び出すと、jQueryのは、この機能を実行します:

function (text) { 
    if (jQuery.isFunction(text)) { 
     return this.each(function (i) { 
      var self = jQuery(this); 

      self.text(text.call(this, i, self.text())); 
     }); 
    } 

    if (typeof text !== "object" && text !== undefined) { 
     return this.empty().append((this[0] && this[0].ownerDocument || document).createTextNode(text)); 
    } 

    return jQuery.text(this); 
} 

必然的にinnerHTMLを設定するよりも遅くなるだろう、ともあなたの知覚フリッカの源であってもよいです。

これをテストするには、同じセレクタを使用できますが、$target.get(0).innerHTML = timeRemaining;を使用します。

関連する問題