2011-10-17 78 views
-1

我有两个脚本在我的页面正文中运行。当在键盘上按下“a”时,将运行另一个脚本。我如何添加一些延迟,然后再次触发第一个脚本?我已经尝试了下面的代码,它不起作用。最好,我想取消第二个脚本开头的第一个超时。从脚本中的另一个脚本执行功能

<script id="source" language="javascript" type="text/javascript"> 
$(function(){ 
    function reloading(){ 
     $.ajax({          
     url: 'api.php',      
     data: "",      
     dataType: 'json',    
     success: function(data)   
     { 
     var id = data[0];    
      _id = id; 
     var vname = data[1];   
     var message = data[2]; 
     var timestamp = data[3]; 
     var field1 = data[4]; 
     _field1 = field1; 
     var val2 = parseInt(field1, 10) ; 
     _val2 = val2; 
     $('#output').hide().html(message).fadeIn("slow"); 
     $('#username').hide().html(vname +":").fadeIn("slow"); 
     setTimeout(function(){ 
     reloading(); 
    }, 60000); 

     } 
     }); 
    } 
    reloading(); 
}); 
    </script> 

    <script> 
    $(document).jkey('a',function() { 
    $.post("update.php", { "id": _id}) 
     $('#output').hide().html("<i>Message</i><br> <br>" +_val2 +" additional.").fadeIn("slow"); 
     $('#username').fadeOut("fast"); 
     $('#valg1').fadeOut("fast"); 
     $('#valg2').fadeOut("fast"); 
     }); 
    setTimeout("reloading()",1000); 
</script> 
+0

你的函数不是匿名的页面加载外部可见。将它移到匿名函数之外或创建您自己的范围 – mplungjan

+0

此外,您的“a”代码不包含该呼叫 - 它在功能之外 – mplungjan

+0

啊,是一个很大的错误。如果我给它一个名字并且使用setTimeout调用它,是不是应该可以运行整个第一个函数? $(function'content(){ function reloading(){ $ .ajax({'然后'setTimeout(“content()”,3000);'? – user977101

回答

0

你必须把重载()在全球范围内从另一个脚本访问。现在它在一个匿名函数中(有点可以缓解全局范围的污染),但对于你的情况,如果将两个脚本合并成一个脚本是不可行的,你将不得不污染全局范围。

如果这是一个一次性的功能,给它一个唯一的前缀或东西:

myApp_reloaded(); 

如果你有一堆需要在全球范围内,建立一个包装对象的功能。现在有很多,你可以使用不同的图案,我更喜欢这个...

function MyApp() { 

    } 
    MyApp.prototype.reloaded = function() { 
    // reload func body here 
    } 




var myApp = new MyApp(); 

现在你可以在全球访问方法:

myApp.reloaded(); 
+0

为什么没有想到关于这两个脚本的结合?事实证明,这是可能的。你能帮我定位和正确调用脚本吗? – user977101

+0

是的,但我相信你可以自己弄清楚:) – mattacular

0

快速砍,直到有人来用更优雅的一个不污染全局范围

<script id="source" language="javascript" type="text/javascript"> 
var tId; 
function reloading(){ 
    $.ajax({          
    url: 'api.php',      
    data: "",      
    dataType: 'json',    
    success: function(data) { 
     var id = data[0];    
     _id = id; 
     var vname = data[1];   
     var message = data[2]; 
     var timestamp = data[3]; 
     var field1 = data[4]; 
     _field1 = field1; 
     var val2 = parseInt(field1, 10) ; 
     _val2 = val2; 
     $('#output').hide().html(message).fadeIn("slow"); 
     $('#username').hide().html(vname +":").fadeIn("slow"); 
     clearTimeout(tId); 
     tId=setTimeout(function(){ reloading();}, 60000); 
    } 
    }); 
} 

$(function(){ 
    reloading(); 
}); 

$(document).jkey('a',function() { 
    $.post("update.php", { "id": _id}) 
    $('#output').hide().html("<i>Message</i><br> <br>" +_val2 +" additional.").fadeIn("slow"); 
    $('#username').fadeOut("fast"); 
    $('#valg1').fadeOut("fast"); 
    $('#valg2').fadeOut("fast"); 
    clearTimeout(tId); 
    tId = setTimeout(function() { reloading()},1000); 

}); 
</script> 
+0

谢谢,但我宁愿尝试理解并整理全球范围,我会给你一个更新它的工作与否 – user977101

+0

好吧,似乎我是正确的,但因为我表达了我的疑惑,你选择了其他答案? – mplungjan

相关问题