Javascript Greasemonkey设置超时和设置间隔未触发

Javascript Greasemonkey设置超时和设置间隔未触发,javascript,jquery,greasemonkey,settimeout,Javascript,Jquery,Greasemonkey,Settimeout,我正在使用以下代码,我得到的唯一警报是警报(t)。我已经尝试了unsafeWindow.setTimeout,window.setTimeout,以及包括setInterval在内的其他变体-没有任何效果 $('#on').change(function () { t = setTimeout(function () { starttimer() },1000);timer_on = true;alert(t); }); function starttimer() { ale

我正在使用以下代码,我得到的唯一警报是
警报(t)
。我已经尝试了
unsafeWindow.setTimeout
window.setTimeout
,以及包括setInterval在内的其他变体-没有任何效果

$('#on').change(function () { t = setTimeout(function () { starttimer() },1000);timer_on = true;alert(t);  });
    function starttimer() { 
    alert('triggered');
        if (timer_on) {
            alert('timerstarted');
            t = setTimeout(function () { startimer() },1000);
            }
    }

编辑:也没有错误。脚本继续执行,并且
t
具有正常值,只是函数从未运行。

不要这样编写代码!学会爱和爱

您使用的是什么版本的FF和Greasemonkey?某些组合在计时器和/或事件侦听器中出现警报问题

无论如何,
$('#time').val()
可能不存在,或者不是您认为的那样。
$(“#时间”)
是否指

请尝试以下代码:

// t and timer_on are global variables.

$('#on').change ( function () {
    var timeVal = $('#time').val ()  ||  1; //-- Account for empty and NaN
    timeVal     = parseInt (timeVal, 10) * 1000;

    alert ('Time val = ' + timeVal);
    t           = setTimeout (starttimer, timeVal);
    timer_on    = true;
    alert (t);
} );

function starttimer () {
    alert ('triggered');
    if (timer_on) {
        alert ('timerstarted');
        var timeVal = $('#time').val ()  ||  1; 
        timeVal     = parseInt (timeVal, 10) * 1000;

        alert ('Time val = ' + timeVal);
        t           = setTimeout (starttimer, timeVal);
    }
}

JSBeautifier-感谢您提供的链接,我将在下次发布之前运行我的代码;)。谢谢,这现在触发了计时器,但是我不确定-$(“#time”).val()为什么存在,我甚至通过添加一个带有两个参数的checkTimeout并同时发出警报来检查它,并且计时器在这之后仍然没有运行。默认设置为
1
和/或
parseInt
可以解释这一点。另外,如果节点不是输入,jQuery
val()
可能无法按预期工作。请更具体一些,例如:链接到目标页面和完整脚本。实际上,我所要做的就是在不编辑代码的情况下重新启动firefox,它再次工作了。只是我还是很奇怪?没有,没有阿贾克斯我会将您链接到该页面,但它需要登录,您甚至需要跨越几个障碍才能进入我正在使用的页面。代码可以工作,但取决于$(“#time”)的情况,您的脚本可能会出现不希望出现的行为。此外,请报告您的版本。您可能需要重新启动Firefox。