Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.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 为什么$(document.blur()和$(document.focus()不能与Safari或Chrome一起使用?_Javascript_Jquery_Html - Fatal编程技术网

Javascript 为什么$(document.blur()和$(document.focus()不能与Safari或Chrome一起使用?

Javascript 为什么$(document.blur()和$(document.focus()不能与Safari或Chrome一起使用?,javascript,jquery,html,Javascript,Jquery,Html,我正在做一个计数器,当文件聚焦时,它会倒计时。当它在模糊上时,它停止倒计时 它在FF中工作,但在Safari和Chrome中,计数器根本不工作 Safari/Chrome是否存在兼容性问题 我所使用的是$(document).blur()和$(document).focus(),它们都在$(document).ready()块中 var tm; $(document).ready(function(){ var seconds = 50; $('#time

我正在做一个计数器,当文件聚焦时,它会倒计时。当它在模糊上时,它停止倒计时

它在FF中工作,但在Safari和Chrome中,计数器根本不工作

Safari/Chrome是否存在兼容性问题

我所使用的是
$(document).blur()
$(document).focus()
,它们都在
$(document).ready()块中

var tm;
$(document).ready(function(){   

        var seconds = 50;
        $('#timer').html(seconds);
        countdown();

    $(window).focus(function(){
         function countdown(){ 
         if (seconds > 0) {
            seconds--; 
            $('#timer').text(seconds);
            tm = setTimeout(countdown,1000);
            }
        if (seconds<=0){ 
            $('#timer').text('Go');
            }   
        }); 



    $(window).blur(function(){
        clearTimeout(tm);
        seconds++;
        $('#timer').text(seconds);

    });
});
var-tm;
$(文档).ready(函数(){
var秒=50;
$('#timer').html(秒);
倒计时();
$(窗口).focus(函数(){
函数倒计时(){
如果(秒>0){
秒--;
$(“#计时器”).text(秒);
tm=设置超时(倒计时,1000);
}
如果(秒)我一直使用
$(窗口).focus()
$(窗口).blur()
。请尝试这些方法

另外,请注意,在FF和IE中,“focus”事件在~document load时触发,而在Chrome和Safari中,只有在窗口以前失去焦点,现在又重新获得焦点时才会触发

UPD:现在,当您粘贴代码时,我重新修改了它(希望)符合您的目的:

var tm;
var seconds = 50;
var inFocus = true;

function countdown() {
    if (seconds > 0) {
        seconds--;
    }

    if (seconds <= 0) {
        $('#timer').text('Go');
    }
    else {
        $('#timer').text(seconds);
        tm = setTimeout(countdown, 1000);
    }
}

$(function() {
    $('#timer').html(seconds);
    countdown();

    $(window).focus(function() {
         if(!inFocus) {
             countdown();
         }
    });

    $(window).blur(function() {
        inFocus = false;
        clearTimeout(tm);
        seconds++;
        $('#timer').text(seconds);
    });
});
var-tm;
var秒=50;
var-inFocus=true;
函数倒计时(){
如果(秒>0){
秒--;
}

如果(秒)嗨,谢谢你的回答。我尝试过你的方法。它只对第二个焦点有效。但是计数器没有启动(窗口)。focus()。有没有办法解决这个问题,即使它需要更多的代码?谢谢洛蒂已经解释了在Chrome中不计算第一个焦点的原因。我用一个跨浏览器解决方案更新了我的答案(我想大概是这样)。您好,谢谢您的解决方案。我只是不明白应该在if语句中添加什么内容。
//count=1;
//count++;
之间有什么区别?非常感谢您的帮助。Regards@alexx0186
if
状态在文档加载时只执行一次。它定义了在浏览器是Chrome或Safari。每次窗口获得焦点时,
count++
都会执行,并增加计数器。我不确定=1和++是否是您所需要的,因为您没有详细描述您希望计数器如何工作。@Alex0186现在我明白了您试图实现的目标。请看一下我更新答案中的代码。