Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何防止IE8文本输入中的光标闪烁?_Javascript_Jquery_User Interface_Animation_Internet Explorer 8 - Fatal编程技术网

Javascript 如何防止IE8文本输入中的光标闪烁?

Javascript 如何防止IE8文本输入中的光标闪烁?,javascript,jquery,user-interface,animation,internet-explorer-8,Javascript,Jquery,User Interface,Animation,Internet Explorer 8,我注意到,在IE8中,使用jQuery运行定时gui更新例程会使文本输入中的光标闪烁 我可能应该耸耸肩,继续前行。。。这显然不是世界末日,一切都很好,等等。。。但我很好奇到底发生了什么 闪烁: var $target = $("#timer"), timeRemaining = 9999; (function timer() { timeRemaining = timeRemaining - 1; $target.text(timeRemaining ); setTi

我注意到,在IE8中,使用jQuery运行定时gui更新例程会使文本输入中的光标闪烁

我可能应该耸耸肩,继续前行。。。这显然不是世界末日,一切都很好,等等。。。但我很好奇到底发生了什么

闪烁:

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,现场示例如下:

(使用jQuery-这会闪烁)


(使用纯ol'JS-不会闪烁)

我猜问题在于您使用的
文本方法。调用此函数时,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