0

我有以下 jQuery 代码:

$("#dataTable tbody")
    .on("click", "tr", function (event) {
        $(oTable.fnSettings().aoData).each(function () {
            $(this.nTr).removeClass('row_selected');
        });
        $(this).addClass('row_selected');
        var rk = $(this).attr('data-rk');
        var pk = $(this).attr('data-pk');
        var en = $(this).attr('data-entity');
        var row = $(this).attr('id').split("_")[1];
        var tab = $(this).attr('data-table');
        var params = '?pk=' + pk + '&rk=' + rk;
        var id = en + " " + pk + " - " + rk;

        $("#deleteLink")
            .attr('data-href', '/Admin/' + tab + 's/Delete' + params)
            .attr('data-row', row)
            .attr('data-entity', en)
            .attr('data-title', 'Delete ' + id)
            .attr('title', 'Delete ' + id)
            .prop('disabled', false);

    });

有没有办法可以将此代码移动到函数中?当 $(this) 不是匿名函数的一部分时,我特别困惑如何使用它。

4

3 回答 3

2

你是这个意思?(顺便说一句,我稍微重构了你的代码)

var clickHandler = function () {
    $( oTable.fnSettings().aoData ).each(function () {
        $( this.nTr ).removeClass( 'row_selected' );
    });

    $( this ).addClass( 'row_selected' );

    var rk = $( this ).data( 'rk' );
    var pk = $( this ).data( 'pk' );
    var en = $( this ).data( 'entity' );
    var row = this.id.split( '_' )[1];
    var tab = $( this ).data( 'table' );
    var params = '?pk=' + pk + '&rk=' + rk;
    var id = en + ' ' + pk + ' - ' + rk;

    $( '#deleteLink' )
        .attr({
            'data-href': '/Admin/' + tab + 's/Delete' + params,
            'data-row': row,
            'data-entity': en,
            'data-title': 'Delete ' + id,
            'title': 'Delete ' + id
        })
        .prop( 'disabled', false );
};

进而:

$( '#dataTable' ).on( 'click', 'tbody tr', clickHandler );
于 2012-07-29T14:24:40.463 回答
1

匿名函数并不是很特别,你只需创建一个普通函数然后传递它

function external(event) {
    $(oTable.fnSettings().aoData).each(function() {
        $(this.nTr).removeClass('row_selected');
    });
    $(this).addClass('row_selected');
    var rk = $(this).attr('data-rk');
    var pk = $(this).attr('data-pk');
    var en = $(this).attr('data-entity');
    var row = $(this).attr('id').split("_")[1];
    var tab = $(this).attr('data-table');
    var params = '?pk=' + pk + '&rk=' + rk;
    var id = en + " " + pk + " - " + rk;
    $("#deleteLink").attr('data-href', '/Admin/' + tab + 's/Delete' + params).attr('data-row', row).attr('data-entity', en).attr('data-title', 'Delete ' + id).attr('title', 'Delete ' + id).prop('disabled', false);
}
//Pass the function like any other variable
$("#dataTable tbody").on("click", "tr", external);
于 2012-07-29T14:25:16.063 回答
0

当然!只需创建一个接受事件作为参数的函数:

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

var clickHanlder = function (event) {
    $(oTable.fnSettings().aoData).each(function () {
        $(this.nTr).removeClass('row_selected');
    });
    $(this).addClass('row_selected');
    var rk = $(this).attr('data-rk');
    var pk = $(this).attr('data-pk');
    var en = $(this).attr('data-entity');
    var row = $(this).attr('id').split("_")[1];
    var tab = $(this).attr('data-table');
    var params = '?pk=' + pk + '&rk=' + rk;
    var id = en + " " + pk + " - " + rk;

    $("#deleteLink")
        .attr('data-href', '/Admin/' + tab + 's/Delete' + params)
        .attr('data-row', row)
        .attr('data-entity', en)
        .attr('data-title', 'Delete ' + id)
        .attr('title', 'Delete ' + id)
        .prop('disabled', false);

};

$(this)在这种情况下,jQuery 将为您正确绑定。

于 2012-07-29T14:25:51.100 回答