0

私は次のものを持っています:

var oTable = $('#dataTable').dataTable({
    iDisplayLength: -1,
    ...
    ...

$("#dataTable tbody").on("click", "tr", gridClickHandler);

function gridClickHandler(oTable) {
    $(oTable.fnSettings().aoData).each(function () {
        $(this.nTr).removeClass('row_selected');
    });
    $(this).addClass('row_selected');

$(this) イベントが関数に渡されると言われましたが、oTable に関連するエラーが発生することがわかったため、何か他のものも渡す必要があります。

gridClickHandler と gridClickHandler 関数への呼び出しを変更して、oTable への参照を渡し、$(this) が機能するようにするにはどうすればよいですか。

4

3 に答える 3

1

匿名関数を使用できます。

$("#dataTable tbody").on("click", "tr", function(event) { gridClickHandler(oTable); } );
于 2012-07-29T16:31:47.097 に答える
1

変数oTableが外部スコープで宣言されている場合、gridClickHandler関数はそれにアクセスできるため、手動で渡す必要はありません。実際のところ、イベント ハンドラーはイベント オブジェクトを最初の引数として受け取るため、実際には TABLE 参照をシャドウイングしています。

例えば:

var foo = 123;

var clickHandler = function ( foo ) {    
    // here, foo is not 123, but the event object  
    // the outer variable foo is shadowed by the local variable foo  
};

最初の引数を削除するだけです:

var gridClickHandler = function () {

これでoTable、外側のスコープから取得されます。

(また、関数宣言を使用する代わりに、無名関数式を変数に割り当てる方法にも注意してください。)

ところで、関数内ではthis、TR 要素を参照します。

于 2012-07-29T16:32:29.187 に答える
0

これを試して:

$("#dataTable tbody").on("click", "tr", gridClickHandler);
gridClickHandler.oTable = oTable;

function gridClickHandler(event) {
    $(oTable.fnSettings().aoData).each(function () {
        $(this.nTr).removeClass('row_selected');
    });
    $(event.target).addClass('row_selected');
}
于 2012-07-29T16:42:50.833 に答える