Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.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 设置超时的智能替代方案_Javascript_Function_Settimeout - Fatal编程技术网

Javascript 设置超时的智能替代方案

Javascript 设置超时的智能替代方案,javascript,function,settimeout,Javascript,Function,Settimeout,我正在使用一些可以添加自定义脚本的软件。经过反复试验,我发现这个脚本只有在我这样写的情况下才有效: setTimeout(function(){ //code }, 900); 但我觉得这有点难看,我觉得应该可以做得更聪明一些。我也不知道在其他电脑上我是否需要更长的时间。也许对于其他人,我需要将其设置为5000,而对于其他人,可以将其设置为300 是否可以在加载所有内容后启动该功能? 我尝试过这种方法,但没有成功: $(document).ready(function(){..}) docum

我正在使用一些可以添加自定义脚本的软件。经过反复试验,我发现这个脚本只有在我这样写的情况下才有效:

setTimeout(function(){
//code
}, 900);
但我觉得这有点难看,我觉得应该可以做得更聪明一些。我也不知道在其他电脑上我是否需要更长的时间。也许对于其他人,我需要将其设置为5000,而对于其他人,可以将其设置为300

是否可以在加载所有内容后启动该功能? 我尝试过这种方法,但没有成功:
$(document).ready(function(){..})
document.addEventListener('DOMContentLoaded',function(){…},false)

这是我的完整代码:

setTimeout(function(){
function correct(searchString, replaceString) {
    $("textarea").bind("keyup", function () {
        var $input = $(this),text = $input.val();
        var pos = $(this).prop("selectionStart");
        if (new RegExp(searchString).test(text.substring(pos-searchString.length,pos)) == true) {
            var newText = text.substring(0,pos-searchString.length) + replaceString + text.substring(pos);
            $input.val(newText);
            var newpos = pos - searchString.length + replaceString.length;
            this.setSelectionRange(newpos,newpos);
        }
    });
}
correct("RR", "ℝ");
correct(">=","≥");
}, 900);

我已经在Discussion论坛(Discussion.org)中将其设置为自定义标题

在文档准备就绪时执行

function correct(searchString, replaceString) {
    $("textarea").bind("keyup", function () {
        var $input = $(this),text = $input.val();
        var pos = $(this).prop("selectionStart");
        if (new RegExp(searchString).test(text.substring(pos-searchString.length,pos)) == true) {
            var newText = text.substring(0,pos-searchString.length) + replaceString + text.substring(pos);
            $input.val(newText);
            var newpos = pos - searchString.length + replaceString.length;
            this.setSelectionRange(newpos,newpos);
        }
    });
}

$(document).ready(function() {
  correct("RR", "ℝ");
  correct(">=","≥");
});

您的最佳选择是挂接到
窗口。onload
事件:

// cross-browser event listener
function addEvent(evnt, elem, func) {
   if (elem.addEventListener)  // W3C DOM
      elem.addEventListener(evnt,func,false);
   else if (elem.attachEvent) { // IE DOM
      elem.attachEvent("on"+evnt, func);
   }
   else { // No much to do
      elem[evnt] = func;
   }
}
// add the actual event
addEvent('load', window, function(){
    // execute your code here
})

你试过把它放在一个“准备好”的处理器里吗<代码>$(函数(){/*此处的代码*/})@NiettheDarkAbsol是的,不起作用。你试过将其放在jQuery包含脚本之后吗?@NiettheDarkAbsol是的这还没有被标记为jQuery,不确定询问者是否有权访问它,因为他们在一个他们不控制文档的网站上发布。一旦页面的所有资源完成加载并被解析,ready应该启动。那么,您是否有其他在ready上运行的javascript?加载您正在等待的脚本的顺序是什么?我的意思是,您可以始终使用window.onload事件处理程序。顺便问一下,你是按需加载特定脚本还是有脚本标签?@Ryan这是网站:但我还没有自己制作软件。好的,从控制台上我看到你有jQuery 2.0.3,你在使用什么浏览器?我在该页面上没有看到任何要绑定的textarea,尝试将对
correct
的调用替换为:
console.log(“已加载”)现在您添加了
警报
,这似乎对我有效。也许绑定没有按预期工作哈哈,太奇怪了,你一直在我的网站上。您将看到,有时先加载addevent,有时先加载settimeout。有时候addevent可以工作,有时候并不奇怪。一旦整个页面加载完毕,就会调用addevent,不管怎样都会调用setTimeout。当setTimeout执行时,DOM是否准备好供您定位和操作完全取决于服务器渲染DOM所需的时间;addEvent将始终工作,但它将花费可变的时间量,具体取决于服务器响应时间我的意思是,警报会发生。所以addEvent确实起作用了。但有时似乎太早了。因为有时键绑定工作,有时不工作。至少在铬合金中是50-50。在firefox中,它一直工作。在IE中,它永远不会起作用。