0

次のスニペットでロード関数が起動しない理由がわかりません。jqueries がすべての機能をロードするまで、関数に渡したデータをログに記録できます

   <script>
    var oTable;
    /* Formating function for row details */
    function fnFormatDetails(nTr)
    {
        var aData = oTable.fnGetData(nTr);
        $(nTr).fadeOut();
        console.log(aData[1]);
        container_id = aData[1];
        var sOut = '<div id="edit_prod_settings_' + aData[1] + '"></div>';

        return sOut;
    }

    $(document).ready(function() {

        oTable = $('#feed_products').dataTable({
            "bProcessing": true,
            "bServerSide": true,
            "sAjaxSource": "../admin/?controller=products&action=getTable",
            "aoColumns": [
                {"sClass": "center", "bSortable": false},
                null,
                {sWidth: '20%'},
                null,
                null,
                null,
                null,
                {"sClass": "center", "bSortable": false},
                {"sClass": "center", "bSortable": false, sWidth: '5%'},
                {"sClass": "center", "bSortable": false}
            ],
            "aaSorting": [[1, 'asc']],
            "fnDrawCallback": function(oSettings)
            {
                $('button.edit').on('click', function() {

                    var nTr = $(this).parents('tr')[0];
                    if (oTable.fnIsOpen(nTr))
                    {
                        /* This row is already open - close it */
                        this.src = "<button class='btn btn-warning btn-xs edit'><i class='icon-plus'></i></button>";
                        oTable.fnClose(nTr);
                    }
                    else
                    {
                        /* Open this row */

                        this.src = "<button class='btn btn-warning btn-xs edit'><i class='icon-minus'></i></button>";
                        //oTable.fnOpen(nTr, fnFormatDetails(nTr), 'details');
                        var openedRow = oTable.fnOpen(nTr, fnFormatDetails(nTr), 'details');
                        console.log(openedRow);
                        $(openedRow).each(function() {
                            console.log(container_id);                        
                            $('#edit_prod_settings_'+ container_id).load('../admin/?controller=products&action=getProdDetails&prod_id=' + container_id);
                        });
                    }
                });
            }
        });
    });


</script>

ロギング

console.log(aData[1]);
        console.log('#edit_prod_settings_'+ aData[1]);
        console.log('../admin/?controller=products&   action=getProdDetails&prod_id=' + aData[1]);

応答

1402879831
#edit_prod_settings_1402879831

最後のものは値を返していません

4

2 に答える 2

1

ドキュメントの引用:

セレクターによって一致する要素がない場合 (この場合、ドキュメントに id="result" の要素が含まれていない場合)、Ajax リクエストは送信されません。

あなたのセレクターは何を返しますか?

console.log( '#edit_prod_settings_'+ aData[1] );
console.log( $('#edit_prod_settings_'+ aData[1]) );
console.log( $('#edit_prod_settings_'+ aData[1]).length );

[編集]

console.log( $('#edit_prod_settings_'+aData[1]).length ); 0 を返します

これは、$('#edit_prod_settings_'+aData[1])セレクターを呼び出したときに、ページに id を持つノードがないことを意味し'edit_prod_settings_'+aData[1]ます。

セレクターを修正するか、 を呼び出す前に必要なノードを作成してください.load()

または、 を使用してコンテンツをロードし、コールバック$.ajax( ... )に html を明示的に追加します。success

于 2013-10-22T08:43:53.207 に答える
0

呼び出した要素がload()存在しません。

あなたのコメントから「console.log( $('#edit_prod_settings_'+aData[1]).length );0を返します」と思います。

これはload()、要素が HTML に追加される前に呼び出すためです。

  • oTable.fnOpenパラメータのfnFormatDetails(nTr)1つとして呼び出します
  • まだ存在しないidの要素のfnFormatDetails呼び出しを返すload()containerId
  • これは、 idsOutを持つ要素の HTML コードです。containerId
  • fnFormatDetails返された後、oTable.fnOpen実際に実行され、コンテンツがsOutHTML に追加されます。今から id の要素が#edit_prod_settings_"+aData[1]存在します。(そして、あなたが呼び出すまで存在しますfnClose

問題を解決するには、fnOpen の実行load() 後に呼び出すことをお勧めします。fnOpenテーブル要素を返すので、これは非常に簡単です。

var openedRow = oTable.fnOpen(nTr, fnFormatDetails(nTr), 'details');
$(openedRow).each(function () {
    // here goes the function that you want called after fnOpen 
    // in your case, .load()
});

aData[1]ただし、外部から値にアクセスできるようにするには、コードを少し再構築する必要がありますfnFormatDetails

于 2013-10-22T02:08:00.510 に答える