我有以下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),而不是匿名函数的一部分。
答案 0 :(得分: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 );
答案 1 :(得分: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);
答案 2 :(得分: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);
};
在这种情况下, jQuery会正确绑定$(this)
。