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;