0

どういうわけかこれは可能だと思いますが、私がやっていることはうまくいきません。

$('#campaign_creative_performance-table #show_thumb').change(function() {
    var show = ($(this).is(':checked')) ? true : false,
        oTable = $('#campaign_creative_performance-table table.sortable').dataTable();
    oTable.fnSetColumnVis(14, show ? false : true);
    oTable.fnSetColumnVis(15, show);
});

これは、列14を非表示にして列15を表示することになっており、その逆も同様です。

列見出しを入れ替えて列の幅を変更していますが、内容は変更されていません。

最初のフラグに再描画フラグを付けてみましたが、変更はありません。

追加情報: sAjaxSourceを介してデータを取得し、fnRowCallbackを介してフォーマットしています。これらの2つの列の形式は次のようになります。

$('td:eq(14)', nRow).html('<p class="limit160" title="'+aData[14]+'">'+aData[14]+'</p>');
$('td:eq(15)', nRow).html('<img src="'+aData[15]+'" />');

さらなる調査 問題は、fnRowCallbackで行われるフォーマットにあります。列14を非表示にすると、15が14になり、データは15ではなくaData 14から取得されます。したがって、フォーマッターが実際に実行している列を見つけるために実行できる何らかのテストが必要です...または$を使用しないでください('td:eq(14)')列を決定します。どうすればいいのかわかりません。

で機能しない簡単な例は、http: //jsfiddle.net/NbSCb/にあります。「clickme」がチェックされている場合、col3のデータが正しくないことに注意してください。

4

4 に答える 4

0

これは機能するはずです。

$('#campaign_creative_performance-table #show_thumb').change(function() {
    table.fnSetColumnVis(14, !this.checked);
    table.fnSetColumnVis(15, this.checked);
});

デモ

于 2012-10-05T17:11:21.670 に答える
0

トリガーされるたびにdataTableを再作成する必要はありません.change。これは、グローバル変数を使用する良い機会です。

oTable = $('#campaign_creative_performance-table table.sortable').dataTable();

$('#show_thumb').change(function() {
    var show = $(this).is(':checked'); // Boolean
    oTable.fnSetColumnVis(4, !show);
    oTable.fnSetColumnVis(5, show);
});​

http://jsfiddle.net/JPU7A/

于 2012-10-05T17:20:16.950 に答える
0

このスレッドに似た問題のように聞こえます:

[http://www.datatables.net/forums/discussion/16236/showinghiding-columns-with-ajax/p1] [1]

于 2013-10-08T03:08:37.093 に答える
-1

問題はフォーマットでした。fnRowCallback内でフォーマットする場合は、フォーマットの決定を決定する必要があります。基本的に、列14を非表示にすると、列15が列14になり、そのフォーマットが適用されます。

解決策は、ルールの外部チェックボックスを調べるifステートメントを使用することでした。

if($('#show_thumb').is(':checked')) {
    $('td:eq(14)', nRow).html('<img src="'+aData[15]+'" style="max-height:100px;" />');
} else {
    $('td:eq(14)', nRow).html('<p title="'+aData[14]+'">'+aData[14]+'</p>');
}

両方のフォーマットオプションが行14に影響しますが、それぞれデータポイント15と14を使用することに注意してください。

于 2012-10-11T17:02:17.023 に答える