2013-07-16 5 views
0

У меня есть jTable, что я хотел бы обновить каждые X секунд. Раньше я выполнял это правильно и делал небольшие изменения, и теперь он не функционирует должным образом, и я не могу определить, что я сделал, что могло бы вызвать это.Что мешает правильной работе функции setInterval?

Вот код из моих jTable и старт/стоп функции:

<script type="text/javascript"> 
      var run=null; 
      $(document).ready(function() { 
       $('#TableContainer').jtable({ 
        title: '', 
        actions: { 
         listAction: 'JSONCreator', 
        }, 
        ajaxSettings: { 
         type: 'POST', 
         dataType: 'json' 
        }, 
        fields: { 
         DeviceId: { 
          key: true, 
          list: false 
         }, 
         DeviceTag: { 
          sorting: false, 
          search: true, 
          title: 'D', 
          width: '40%' 
         }, 
         CH1: { 
          title: 'C1', 
          width: '10%' 
         }, 
         CH2: { 
          title: 'C2', 
          width: '10%' 
         }, 
         Timestamp: { 
          title: 'T', 
          width: '30%', 
          create: false, 
          edit: false 
         } 
        }, 
       }); 
       $('#TableContainer').jtable('load'); 
      }); 
      function startFunction() { 
       document.title = '(Running)'; 
       run = window.setInterval("$('#TableContainer').jtable('reload')", 5000); 
       window.open('M'); 
      } 
      function stopFunction() { 
       document.title = 'W'; 
       window.clearInterval(run); 
       window.open('M'); 
      } 
     </script> 

, а затем после того, как у меня есть две кнопки внутри моего тела, определенные как это:

<input type="submit" value="Start" onclick="startFunction()"/> 
<input type="submit" value="Stop" onclick="stopFunction()"/> 

и ниже этого у меня есть эта линия

<div id="TableContainer"/> 

Теперь он будет выполнять функцию один раз, когда я нажимаю eit ее кнопка, но потом она не будет продолжать перезагружать стол.

window.setInterval("$('#TableContainer').jtable('reload')", 5000); 

Что вызывает это? или как я могу отлаживать что-то вроде этого? как я уже говорил, раньше это было правильно выполнено

ответ

1

Вы не отмены передачи запроса действия.

<input type="submit" value="Start" onclick="startFunction()"/> 
<input type="submit" value="Stop" onclick="stopFunction()"/> 

вам нужно возвратить ложные или позвонить preventDefault

<input type="submit" value="Start" onclick="startFunction(); return false;"/> 
<input type="submit" value="Stop" onclick="stopFunction(); return false;"/> 

Вы действительно не должны использовать встроенные события, вы используете JQuery, использовать его!

$(window).on("click", "input[type=submit]", function(e) { 
    e.preventDefault(); 
    if (this.value==="Start") { 
     startFunction(); 
    } else { 
     stopFunction(); 
    } 
}); 

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

+0

Спасибо, что это было очень полезно. – jeanqueq

0

Ваш код неисправен.

window.setInterval("$('#TableContainer').jtable('reload')", 5000); 

следует читать

window.setInterval(function(){$('#TableContainer').jtable('reload');},5000) 
+0

Первый способ будет работать. Это не хорошо, но это функционально. https://developer.mozilla.org/en-US/docs/Web/API/window.setInterval – BNL

+0

Спасибо за быстрый ответ и отзыв о форматировании, но это не решение моей проблемы. – jeanqueq

+0

А, хорошо поймать. Я никогда не предполагал, что это возможно. –

Смежные вопросы