[英]How to create one javascript/jquery function-handler for many items?
我有如下的html:
<table class="table" id="subscriptions">
<tbody id="subscriptions-tbody">
<tr>
<td>Item 1</td>
<td><a href="#">delete</a></td>
</tr>
<tr>
<td>Item 2</td>
<td><a href="#">delete</a></td>
</tr>
<tr>
<td>Item 3</td>
<td><a href="#">delete</a></td>
</tr>
</tbody>
</table>
可以在此處動態添加項目。
現在,我應該創建一個函數,如果用戶單擊刪除,它將幫助我從列表中刪除元素。 看起來我應該:
href
嗎? 怎么做?
這是事件委托的完美案例。 將事件掛在table
或tbody
,但僅當事件發生在刪除鏈接上時,才讓jQuery觸發它,如下所示:
$("#subscriptions-tbody").delegate("a", "click", function(event) {
var row = $(this).closest('tr');
// ...delete the row
return false; // Don't try to follow the link
});
由於事件是掛在table
或tbody
,因此添加和刪除行並不重要,因為事件是在table
或tbody
級別處理的。
在上面,我使用delegate
是因為我喜歡明確的程度。 使用jQuery 1.7或更高版本,可以使用的方法太overloaded- on
功能 ,而不是:
$("#subscriptions-tbody").on("click", "a", function(event) {
var row = $(this).closest('tr');
// ...delete the row
return false; // Don't try to follow the link
});
請注意,參數的順序略有不同。
嘗試這個:
<table class="table" id="subscriptions">
<tbody id="subscriptions-tbody">
<tr data-id="1">
<td>Item 1</td>
<td><a href="#" class="delete">delete</a></td>
</tr>
<tr data-id="2">
<td>Item 2</td>
<td><a href="#" class="delete">delete</a></td>
</tr>
<tr data-id="3">
<td>Item 3</td>
<td><a href="#" class="delete">delete</a></td>
</tr>
</tbody>
</table>
您將為刪除錨定一個類,例如class="delete"
,並將data-id
屬性放置到表行中,以便唯一地標識每個項目並知道要發送到服務器的ID。
現在,您的js可能如下所示:
$("#subscriptions-tbody").on('click', 'a.delete', function(e){
var tr = $(e.currentTarget).closest('tr');
//get the id
var id = tr.attr("data-id");
//make ajax request
$.ajax({
url: 'script.php',
data: id,
success: function(data) {
//hide the item or remove
tr.remove(); // tr.hide();
// ajax callback
}
});
});
您應該將tr
服務器端所需的信息( 如id
)保留在data-
屬性下 ,並使用.on()
處理表中的事件。
html
<table class="table" id="subscriptions">
<tbody id="subscriptions-tbody">
<tr data-id="3">
<td>Item 1</td>
<td><a href="#" class="delete">delete</a></td>
</tr>
<tr data-id="5">
<td>Item 2</td>
<td><a href="#" class="delete">delete</a></td>
</tr>
<tr data-id="6">
<td>Item 3</td>
<td><a href="#" class="delete">delete</a></td>
</tr>
</tbody>
</table>
腳本
$("#subscriptions").on("click", "a.delete", function(e) {
e.preventDefault();
var row = $(this).closest('tr'),
relatedId = row.data('id');
$.post(...); // use relatedId here
row.fadeOut(500, function(){
row.remove();
})
});
您可以將ID作為data-
屬性存儲在控件或行上。 將Click處理程序委托給itleslf表,以解決使用on()
方法運行代碼時不存在的動態添加的元素。
HTML:
<!-- class added to element -->
<a href="#" class="delecte-btn" data-id="3">delete</a>
JS
$('#subscriptions').on('click', '.delete-btn',function(evt){
evt.preventDefault();
var id=$(this).data('id'), $row=$(this).closest('tr');
/* send data to server and remove row on success*/
$.post('serverUrl.php', { rowID: id, action :'delete'}, function(){
$row.remove();
})
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.