-1

我有一个代码块,我想每 10 秒左右执行一次,也可以在按钮单击事件上执行。我应该创建一个函数来节省编码重复吗?我将在页面上有很多按钮来触发这段代码,但我意识到我可以使用类选择器来触发代码。我需要计时器间隔,因为第 3 方将能够更改代码正在检查的值,我不关心计时器是否超级准确。

如何将代码更改为函数?我已经看到了一些创建函数的示例,但没有看到任何符合我要求的示例。

//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);
            }
        });
    });
}); 

感谢您的任何想法和帮助

4

2 回答 2

1

如果需要从多个地方调用一个代码块,将它封装在一个函数中,然后根据需要调用该函数绝对是一个好主意。所以:

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

根据函数的作用给函数一个有意义的名称,在你的情况下可能checkStatus是合适的。

“我想每 10 秒左右执行一次”

好的,您可以使用该setInterval()功能

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

请注意,当您传递someFuncNamesetInterval()您时,它的名称后包含括号 - 那是因为您没有调用该函数,您传递的是对它的引用,setInterval()然后 JS 在指定的时间间隔为您调用该函数。

“我将在页面上有很多按钮来触发这段代码,但意识到我可以使用类选择器来触发代码”

好的,因此将您的函数绑定为指定类的所有元素的单击处理程序:

$(".classOfButtonsHere").on("click", someFuncName);
于 2013-07-02T11:21:34.470 回答
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>
于 2013-07-02T11:26:05.923 回答