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)
  • fnFormatDetails您返回load()对具有 id 的元素的调用时containerId该 id 尚不存在
  • 然后你返回sOut,这是带有 id 的元素的 HTML 代码containerId
  • fnFormatDetails返回后,oTable.fnOpen实际执行,将内容附加sOut到您的 HTML 中。从现在开始,带有 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 回答