2011-06-20 8 views
0

基本的には、テーブルをロードしてdivtableContentsの内部に配置する関数getTableDataを呼び出しようとしています。各<th>要素からid値を取得する

私がしようとしているのは、それぞれのthのid値を関数から生成することです。テーブルには正しいデータがロードされますが、id値は警告されません。負荷の直後にアラートを入れても何も表示されません。

$(document).ready(function() { 
     $('.tableNames').live('click', function (event) { 
      $('#tableContents').load(getDBData('getTableData', '', $(this).text()), function() { 
      //alert('here'); 
       $('#tableData th').each(function() { 
        var id = $(this).attr("id"); 
        // compare id to what you want 
        alert(id); 
       }); 
      }); 
     }); 
    }); 

私は間違って何をしていますか?ページのレンダリング時に

<table id='tableData'> 
<tr class='tableHeader'> 
<th>Modified</th> 
<th id='col1'>col1</th> 
<th id='col2'>col2</th> 
<th id='col3'>col3</th> 
<th id='col4'>col4</th> 
<th id='col5'>col5</th> 
<th id='col6'>col6</th> 
<th id='col7'>col7</th> 
<th id='col8'>col8</th> 
<th id='col9'>col9</th> 
</tr>... 

function getDBData(type, dbName, tableName) { 

    $.ajax({ 
     type: "GET", 
     url: "ajaxDBReturn.asp?type="+ type + "&dbName=" + dbName + "&tableName=" + tableName, 
     contentType: "application/json; charset=utf-8", 
     success: function (result) { 
      if(type == "getTables") 
      { 
       //result = "<table id='tableList'>" + result + "</table>"; 
       ($("#tableList").html(result)); 
      } else if (type == "getTableData") { 
       ($("#tableContents").html(result)); 
      }else if (type == "getTableRelationship"){ 
       result = "<table id='listTableBody'>" + result + "</table>"; 
      } 



     } 
    }); 

} 
+0

チェックしましたか? – kanchirk

+1

前もって$(document).ready(function(){})がありますか? – lam3r4370

+0

はいTHはid値を持ち、$(document).ready(function(){})のすべてをラップしました – webdad3

答えて

4

私は今までthisを読んでいます。​​関数は、完全なデータではなくurlになります。そうすれば、実際にデータを追加することはできません。load()メソッドは、URLを含む文字列を取得しないと、メソッドをロードしないためです。

getDBData自体を追加すると、succesはありません。代わりにあなたのsucces関数をgetDBDataに与えて、テーブルの構築が終わったら関数を呼び出す必要があります。

このような場合は、私はそうのような単純なグローバル関数呼び出しをお勧めします:あなたは、このテーブルヘッダ要素はIDが含まれているかどうか

$(document).ready(function() 
{ 
    $('.tableNames').live('click', function (event) 
    { 
     // here is the change 
     // do you really need to call $('#tableContents')? 
     // you are probably also doing that in the function itself. 
     // also give your success function to your home-made function 
     getDBData('getTableData', '', $(this).text(), function() 
     { 
      $('#tableData th').each(function() 
      { 
       var id = $(this).attr("id"); 
       // compare id to what you want 
       alert(id); 
      }); 
     }); 
    }); 
}); 
+0

+1これまでに提示された情報を考えれば、これはおそらく問題だと思います。 – user113716

+0

私は実際にこれに元来非常に似たコードを持っていました...すべてはうまくいったが、IDはポップしなかった。私はテーブルを1位にしてからIDのためにテーブルをループさせたいので、ロードを使用しました。 – webdad3

+0

@marnixと@patrickのおかげで、他の誰もが貢献しました... AJAX呼び出しの成功関数にアラートを移動したら、私は探していた結果を得ました。 – webdad3

0

#tableData場合には存在しない、またはそれが存在しますが、ページをレンダリングする際に任意のthの要素を持っていない場合は、each機能は、反復処理することは何もありません。データがロードされたときに#tableDataが作成または変更された場合は、delegateを使用して関数をバインドする必要があります。

+1

それぞれがloadのコールバックにあります。 –

+1

+1に@kingjivが書いたものに加えて、 '.delegate()'はとにかく動作しませんでした。これは、イベントハンドラを呼び出す場合にのみ便利です。 – user113716

+0

はいロードがテーブルを生成しています – webdad3

関連する問題