2012-11-21 166 views
2

我有以下功能刪除一行。我想通過傳入#search_result來重用此功能。如何將變量傳遞給click事件處理程序?

function row_delete_ajax(event) { 
    event.preventDefault(); 
    if (confirm(gettext('Are you sure you want to delete this row?'))) { 
    var url = $(this).attr("href") + "/"; 

     $.post(url, function(result){ 
      $('#search_result').empty(); 
      $('#search_result').append(result); 
     });     
    }  
}; 

這是我最初如何綁定功能,但那種卡住如何#search_result傳遞給row_delete_ajax

$(document).ready(function(){ 
    $('#search_result').find(".row_delete_ajax").click(row_delete_ajax); 
} 
+0

這應該對你有幫助 - http://www.quirksmode.org/js/events_access.html –

回答

3

這樣做的另一種方法是使用[eventData]參數:

EVENTDATA:數據的地圖將被傳遞給事件處理程序。

$(document).ready(function(){ 
    // Create an object with all the properties you want. 
    var data = { id: '#search_result' }; 

    // Pass the data object as the first parameter in the click-event. 
    $('#search_result').find(".row_delete_ajax").click(data, row_delete_ajax); 
}); 

,然後用它是這樣的:

function row_delete_ajax(event) { 
    event.preventDefault(); 
    if (confirm(gettext('Are you sure you want to delete this row?'))) { 
    var url = $(this).attr("href") + "/"; 

     $.post(url, function(result){ 
      $(event.data.id).empty(); 
      $(event.data.id).append(result); 
     });     
    }  
}; 

同時檢查event.data例如。

+1

我喜歡這種方式。其實是想知道是否有一種方法可以訪問事件參數的屬性。這很有趣。僅供參考,我不是那個問這個問題的人。 –

2

你有沒有想過使用存儲的數據()http://api.jquery.com/jQuery.data/元信息?

$(document).ready(function(){ 
    $('#search_result').find(".row_delete_ajax") 
     .data('target', 'search_result') 
     .click(row_delete_ajax); 
} 

然後你row_delete_ajax將如下所示:

function row_delete_ajax(event) { 
    event.preventDefault(); 
    if (confirm(gettext('Are you sure you want to delete this row?'))) { 
     var url = $(this).attr("href") + "/"; 

     var target = $(this).data('target'); 
     $('#' + target).load(url); 
    } 
} 
2

你得稍微重寫你的點擊是這樣的:

$(document).ready(function(){ 
    $('#search_result').find(".row_delete_ajax").click(function (event) { 
     row_delete_ajax(event, $("#search_result")); 
    }); 
} 

然後改變你的函數取兩個參數:

function row_delete_ajax(event, searchResult) { 
    event.preventDefault(); 
    if (confirm(gettext('Are you sure you want to delete this row?'))) { 
     var url = $(this).attr("href") + "/"; 

     $.post(url, function(result){ 
      searchResult.empty(); 
      searchResult.append(result); 
     });     
    }  
}; 
相關問題