2013-07-02 51 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>