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

Вы уверены, что код отображается? Я заметил внутри обработчика успеха Ajax, который вы используете '$ ('img'). Attr ('src', 'lightbulbon.png')', который будет устанавливать src каждого элемента img на странице на одно и то же. – nnnnnn

ответ

1

Если блок кода должен быть вызван из нескольких мест, это, безусловно, хорошая идея, чтобы инкапсулировать его в функции, а затем вызвать функцию по мере необходимости. Итак:

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

Дайте функцию значимое имя в соответствии с тем, что он делает, в вашем случае, возможно checkStatus было бы уместно.

"Я хотел бы, чтобы выполнить каждые 10 секунд или около того"

ОК, вы можете использовать setInterval() function для этого:

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

Обратите внимание, что при передаче someFuncName в setInterval() вы делаете не включают круглые скобки после его имени - это потому, что вы не вызываете функцию, вы проходите ar к нему добавляется setInterval(), а затем JS вызывает функцию для вас в указанный интервал.

«У меня будет много кнопок на странице, которая будет срабатывать этот блок кода, но понимаю, что я могу использовать селектор класса для запуска кода»

ОК, так что связать ваш функция как обработчик щелчка для всех элементов заданного класса:

$(".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> 
Смежные вопросы