2012-07-29 77 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)你在這種情況下。