5

私はすべてのユーザーを含むテーブルを開発しています。テーブルの行をクリックして、クリックが実行されると開くフォームでデータを編集することによっても変更できます。

ページの読み込み時にすべてのユーザーを読み込んでいる場合、コードは正常に機能します。

データテーブルの初期化時にユーザーをロードするようにデータテーブルを変更すると、最初のページでのみ機能します。

下部のコメントを外してready(function())削除するfnInitCompleteと、最初のページでも機能しません。

これが私のコードの関連部分です:

        $(document).ready(function(){
            tbl = $('#nutzer').dataTable( {
                "bJQueryUI": true,
                "sScrollX": "100%",
                "bProcessing": true,
                "bServerSide": true,
                "iDisplayLength": 10,
                "sAjaxSource": "xhr.php",
                "sPaginationType": "full_numbers",
                "fnInitComplete": function() {
                    $('#nutzer tbody tr').on("click", function () {
                        aufklappen(this);
                    } );
                }
            } );

            $( "#create-user" ).button().click(function() {
                $( "#dialog-form" ).dialog( "open" );
            });
//            $('#nutzer tbody tr').on("click", function () {
//                aufklappen(this);
//            } );
        });

        function aufklappen(row) {
            if ( tbl.fnIsOpen(row) ) {
                tbl.fnClose(row);
            } else {
                set = tbl.fnSettings().aoOpenRows[0];
                (set != null) ? (tbl.fnClose(set.nParent)) : null;
                $.post("benutzerBearbeiten.php", { 
                    funktion : "benutzerDaten",
                    id : $(row).children( "td:first-child" ).text()
                }, function(data){
                    tbl.fnOpen( row, data);
                    $( "#deaktivieren").button().click(function(e){
                        e.preventDefault();
                        deaktivieren();
                    });
                    $( "#speichern").button().click(function(e){
                        e.preventDefault();
                        speichern();
                    });
                }
            ) };
        }

datatablesページネーションを介したページの読み込みまたはページの変更後、手動で呼び出すことができます

$('#nutzer tbody tr').on('click', function () {
    aufklappen(this);
} );

クリック関数はtrに完全にバインドされます。

datatables-pluginによって作成された要素は、私が定義したon()ハンドラーに到達していないようですが、その理由はわかりません。


編集

「システム再起動」の回答を利用して、fnInitCompleteパーツを削除して追加することになりました

"asStripeClasses": [ "odd nutzer_tr", "even nutzer_tr"]

初期化部分に

$("body").delegate(".nutzer_tr", "click", function () {
    aufklappen(this);
});

ready(function())。追加のクラスnutzer_trは、開いたテーブル行が閉じないようにすることです。

4

1 に答える 1

23

ライブイベントが必要だと思います。

$('body').on('click', '#nutzer tbody tr', function () {
    aufklappen(this);
});

またはdelegate()を使用できます

$('body').delegate('#nutzer tbody tr', 'click', function () {
    aufklappen(this);
});
于 2012-05-16T12:09:37.393 に答える