2012-02-14 12 views
0

ここに問題があります:私はJQueryのtablesorterを使ってテーブルのページを設定しています。テーブルの行は、次のようにデータベースから取得されます。Ajaxをテーブルソート/フィルタリングと組み合わせる

//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の機能を呼び出しますあるポジションをプレイしているプレイヤーのみがいるテーブルを表示し、それが想定しているとおりの動作をしますが、テーブルのページがなくなりました。代わりに、大きなテーブルを1つ表示します。私はページがリロードされていないので、それをページ分割するJavascriptが処理されないためだと思いますか? Ajaxコール中にJavascript関数を再度呼び出す方法はありますか?ここでアヤックスだと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>"; 
?> 

、ページの先頭にあるtablesorter jQueryの、:

<script type="text/javascript"> 
$(document).ready(function() { 
    $("table") 
    .tablesorter({widthFixed: true, widgets: ['zebra']}) 
    .tablesorterPager({container: $("#pager"), size: 20}); 
}); 
</script> 

答えて

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); 
}); 
+0

ありがとう、私はそれを試してみます。私は私の質問に元のtablesorter呼び出しを追加しています。 – robert

+0

@ Jovanはい、私は自分の答えを更新しました。変数をテーブルに初期化してから再利用するオプションを保存することができます –

+0

完璧、ありがとう!できるだけ早く答えを受け入れます。 – robert

0

は、私はあなたにもjQueryのを使用している場合、それは良くなると思うオブジェクトに常にあなたがそれらを救うことができるのと同じオプションを使用するので、それの.ajax()方法を使用してください、代わりにするには簡単なXMLHttpRequest()は、成功または失敗のハンドラを扱うことができるので、非常に便利です。