不使用 ID 重複元素的事件

問題

頁面中有一系列重複元素,你需要知道發生了哪一個事件才能對該特定例項執行某些操作。

  • 給所有共同元素一個共同的類
  • 將事件偵聽器應用於類。this inside 事件處理程式是發生事件的匹配選擇器元素
  • this 開始遍歷該例項的外部最重複容器
  • 在該容器中使用 find() 來隔離特定於該例項的其他元素

HTML

<div class="item-wrapper" data-item_id="346">
   <div class="item"><span class="person">Fred</span></div>
   <div class="item-toolbar">
      <button class="delete">Delete</button>
   </div>   
</div>
<div class="item-wrapper" data-item_id="393">
   <div clss="item"><span class="person">Wilma</span></div>
   <div class="item-toolbar">
      <button class="delete">Delete</button>
   </div>   
</div>

jQuery 的

$(function() {
  $('.delete').on('click', function() {
    // "this" is element event occured on
    var $btn = $(this);
    // traverse to wrapper container
    var $itemWrap = $btn.closest('.item-wrapper');
    // look within wrapper to get person for this button instance
    var person = $itemWrap.find('.person').text();
    // send delete to server and remove from page on success of ajax
    $.post('url/string', { id: $itemWrap.data('item_id')}).done(function(response) {
      $itemWrap.remove()
    }).fail(function() {
      alert('Ooops, not deleted at server');
    });
  });
});