2013-07-02 63 views
-1

我有一段代碼,我希望每10秒左右執行一次,同時還要按一下按鈕單擊事件。我應該創建一個函數來節省編碼重複嗎?我會在頁面上有很多按鈕來觸發這段代碼,但是我意識到我可以使用類選擇器來觸發代碼。我需要定時器間隔,因爲第三方將能夠更改代碼正在檢查的值,我不關心定時器是否超級準確。jquery創建自己的函數?

如何將代碼更改爲函數?我已經看到了一些創建函數的例子,但我沒有看到符合我的要求的任何東西。

//This Ajax checks the current on/off status of the passed X10 code 
$('img.checkStatus').each(function(i, obj) { 
    $x10Device = $(this).data("x10"); 
    var data="url=http://192.168.0.34:81/tenHsServer/tenHsServer.aspx?  t=ab&f=DeviceStatus&d=" +  $x10Device ; 

    $.ajax({     
     url:"urlencode.php", 
     data: data, 
     type: "POST", 
     success: function(data) { 
      myd = $('<span />').html(data).find("#Result").text(); 
      var Nmyd = myd.charAt(3); 
      if (Nmyd == '2'){ 
       $('img').attr('src','lightbulbon.png') 
      } 
      else{ 
       $('img').attr('src','lightbulboff.png')};  
      }, 
      error: function (request, status, error) { 
       alert(request.responseText); 
      } 
     }); 
    }); 
}); 

感謝您的任何想法和幫助

+2

_「我應該創建一個函數來節省編碼重複嗎?」_ - 是的。 – nnnnnn

+1

您可以使用函數funName(argList,...){code here}'定義一個函數,任何在您的函數中應該變量的東西都應該作爲參數傳遞給它。詳細瞭解功能:http://eloquentjavascript.net/chapter3.html。 –

+0

你確定顯示的代碼有效嗎?我注意到在使用'$('img')。attr('src','lightbulbon.png')'的Ajax成功處理程序中,它將頁面上每個img元素的src設置爲相同的東西。 – nnnnnn

回答

1

如果需要從多個地方調用的代碼塊它絕對是一個好主意,它封裝在一個函數,然後調用該函數需要。所以:

function someFuncName() { 
    // your block of code here 
} 

根據它做什麼,你的情況可能是checkStatus將是適當的給函數一個有意義的名字。

「我想執行每10秒左右的」

OK,你可以使用setInterval() function爲:

var intervalId = setInterval(someFuncName, 10000); // specify delay in milliseconds 
// and later, if you need to cancel the interval: 
clearInterval(intervalId); 

注意,當你通過someFuncNamesetInterval()你做不是在它的名字後面加括號 - 那是因爲你沒有調用函數,你是通過ar引用它到setInterval(),然後JS以指定的時間間隔爲你調用函數。

「我會在網頁上的按鈕將火這個代碼塊的很多,但知道我可以使用類選擇觸發代碼」

好了,綁定你功能爲指定類的所有元素click處理:

$(".classOfButtonsHere").on("click", someFuncName); 
+0

謝謝清除並點! –

0

,你可以嘗試這樣的事情

<script type="text/javascript" > 
    var timer = setInterval("timerAjaxFunction()" , 10000) 
    function timerAjaxFunction() 
    { 
     // your ajax code for 10 seconds comes here...  
    } 

    $(document).ready(function(){ 
     $(".selctorClassofbutton").on("click",function(){ //button to call function 
     clearInterval(timer); 
     timerAjaxFunction(); 
     timer = setInterval("timerAjaxFunction()" , 10000); 
     }) 
    });  
    </script>