JavaScript只工作一次

时间:2014-11-13 21:32:44

标签: javascript jquery html

我遇到了一些问题。我有页面,并使自动刷新div(表)内容一切正常,我有从javascript过滤器的表,但刷新过滤器后。我尝试再次调用过滤器功能,但没有任何反应。

为什么不使用setInterval脚本再次使用filterJS()?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Main Page</title>

    <script type="text/javascript" src="filter/tablefilter.js"></script>
    <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<div class="refresh">
<table id="tab" class="my" >
	<tr>
		<th>World Regions</th>
		<th>Population ( 2007 Est.)</th>
		<th>Population % of World</th>
		<th>Internet Usage, Latest Data</th>
		<th>% Population ( Penetration )</th>
		<th>Usage % of World</th>
		<th>Usage Growth 2000-2007</th>
	</tr>
	<tr>
		<td>Africa</td>
		<td>933,448,292</td>
		<td>14.2 %</td>
		<td>32,765,700</td>
		<td>3.5 %</td>
		<td>3.0 %</td>
		<td>625.8%</td>
	</tr>
	<tr>
		<td>Asia</td>
		<td>3,712,527,624</td>
		<td>56.5 %</td>
		<td>389,392,288</td>
		<td>10.5 %</td>
		<td>35.6 %</td>
		<td>240.7 %</td>
	</tr>
	<tr>
		<td>Europe</td>
		<td>809,624,686</td>
		<td>12.3 %</td>
		<td>312,722,892</td>
		<td>38.6 %</td>
		<td>28.6 %</td>
		<td>197.6 %</td>
	</tr>
	<tr>
		<td>Middle	East</td>
		<td>193,452,727</td>
		<td>2.9 %</td>
		<td>19,382,400</td>
		<td>10.0 %</td>
		<td>1.8 %</td>
		<td>490.1 %</td>
	</tr>
</table>
</div>

<script language="javascript" type="text/javascript">
//<![CDATA[	
function filterJS(){
	var table2_Props = 	{					
					col_0: "select",
					col_5: "none",
					display_all_text: " [ Show all ] ",
					sort_select: true
				};
	setFilterGrid( "tab",table2_Props );}
//]]>

filterJS();

	$(document).ready(function(){
		setInterval(function() {
            filterJS();
			$('.refresh').load(document.URL +  ' .refresh');}, 2000);
	});
</script>

</body>
</html>

3 个答案:

答案 0 :(得分:2)

在表更新后调用它,使用load()提供的回调参数

setInterval(function() { $('#myTable').load(document.URL +  ' #myTable', filterJS);}, 2000);

你真的应该考虑使用setTimeout而不是间隔,所以如果服务器需要一段时间来响应,那么调用就不会开始堆积。

function filterJS() {
    var table2_Props = {
        col_0: "select",
        col_1: "select",
        col_3: "none",
        display_all_text: " [ All ] ",
        sort_select: true
    };
    setFilterGrid("myTable", table2_Props);
    window.setTimeout(reloadData, 2000);
};

function reloadData() {
    $('#myTable').load(document.URL + ' #myTable', filterJS);
}

答案 1 :(得分:0)

将其设置为在回调中递归调用函数,并使用setTimeout代替区间

function getTable() {
  $('#myTable').load(document.URL + ' #myTable', function() {
    setTimeout(function(){
      getTable();
    }, 2000)
  });
}

答案 2 :(得分:0)

如果你试图延迟脚本以确保在加载表之后运行过滤器,它只会在你的网络运行缓慢之前工作......所以这样做很糟糕。代替:

$(document).ready(function(){
      $('#myTable').load(document.URL +  ' #myTable', function() {
          filterJS();
      });
});

这样您就可以使用一个回调函数,该函数将在加载完成后每次执行。

相应地添加递归。