2011-10-17 75 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

相關問題