2013-07-16 45 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()"/> 

需要返回false或调用了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

啊,很好。我从来没有认为这甚至是可能的。 –

相关问题