问题在于:我正在使用JQuery tablesorter对表进行分页。表行是从数据库中提取的,如下所示:
//list players by points (default listing)
$result=mysql_query("select * from players order by pts_total") or die(mysql_error());
echo "<table id='list_table' class='tablesorter'><thead><tr><th width='25px'>Pos</th><th width='200px'>Player</th><th width='25px'>Club</th><th width='25px'>Value</th><th width='25px'>Points</th></tr></thead><tbody>";
while($row=mysql_fetch_array($result)){
//get team logo
$result1=mysql_query("select amblem from real_teams where team_name='$row[team]' ") or die(mysql_error());
$row1=mysql_fetch_array($result1);
echo "<tr>";
echo "<td>T</td>";
echo "<td>".$row['name']."</td>";
echo "<td style='text-align:center;'><img src='".$row1['amblem']."' height=16px title='".$row['team']."'></td>";
echo "<td>".$row['current_value']."</td>";
echo "<td>".$row['pts_total']."</td>";
echo "</tr>";
}
echo "</tbody></table>";
一切正常,桌子是分页的,它列出了足球运动员。但问题是,我有一个下拉列表,用户应该可以选择只显示播放某个位置的玩家(该信息位于同一个数据库表中):
<select name="show_positions" id="show_positions" onChange="showPlayers(this.value)">
<option value="A">All Positions</option>
<option value="G">Goalkeepers</option>
<option value="D">Defenders</option>
<option value="M">Midfielders</option>
<option value="S">Strikers</option>
</select>
它调用一个Ajax函数,该函数显示一个只有播放某个位置的玩家的表,并且它会按预期执行,但该表不再是分页的。相反,它显示一个大表。我认为这是因为没有处理分页的Javascript,因为页面没有重新加载?有没有办法在Ajax调用期间再次调用Javascript函数?这是它调用的Ajax和PHP文件:
<script type="text/javascript">
function showPlayers(str)
{
if (str=="")
{
document.getElementById("inner_list").innerHTML="";
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("inner_list").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","listplayers.php?q="+str,true);
xmlhttp.send();
}
</script>
listplayers.php:
<?php
include('../include/db.php');
dbConnect('dbname');
$pos=$_GET['q'];
if ($pos=="A")
$pos="";
//list players by points (default listing)
$result=mysql_query("select * from players where position LIKE '%$pos%' order by pts_total") or die(mysql_error());
echo "<table id='list_table' class='tablesorter'><thead><tr><th width='25px'>Pos</th><th width='200px'>Player</th><th width='25px'>Club</th><th width='25px'>Value</th><th width='25px'>Points</th></tr></thead><tbody>";
while($row=mysql_fetch_array($result)){
//get team logo
$result1=mysql_query("select amblem from real_teams where team_name='$row[team]' ") or die(mysql_error());
$row1=mysql_fetch_array($result1);
echo "<tr>";
echo "<td>T</td>";
echo "<td>".$row['name']."</td>";
echo "<td style='text-align:center;'><img src='".$row1['amblem']."' height=16px title='".$row['team']."'></td>";
echo "<td>".$row['current_value']."</td>";
echo "<td>".$row['pts_total']."</td>";
echo "</tr>";
}
echo "</tbody></table>";
?>
表格式的JQuery,它位于页面的头部:
<script type="text/javascript">
$(document).ready(function() {
$("table")
.tablesorter({widthFixed: true, widgets: ['zebra']})
.tablesorterPager({container: $("#pager"), size: 20});
});
</script>
答案 0 :(得分:1)
在回调处理程序中,如果你在DOM中插入表,你应该再次在表上调用tablesorter插件来重新初始化它
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("inner_list").innerHTML=xmlhttp.responseText;
$("#list_table").tablesorter( );
}
为了确保始终使用相同的选项,您可以将它们保存在对象中
$(document).ready(function(){
var list_table_options = {sortList: [[0,0], [1,0]]};
$("#list_table").tablesorter( list_table_options );
});
答案 1 :(得分:0)
我认为如果你甚至使用jQuery会更好,所以使用它的.ajax()
方法,而不是简单的XMLHttpRequest()
,所以你可以使用成功或失败的处理程序,它是非常的有用的。