2012-07-29 79 views
0

我有以下的jQuery代码:如何使用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)。

回答

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

匿名函数是不是真的特别的那样,您只需进行正常的功能,然后将它传递

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); 
+0

“function external”和var external = function(event)“有什么区别?我不确定使用哪一个。 – Alan2 2012-07-29 14:30:50

+0

@Gemma第一个是函数声明,它有一个名字,第二个是一个匿名函数分配给名为'external'的变量,我更喜欢函数声明。 – Esailija 2012-07-29 14:34:55

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)你在这种情况下。