2013-10-07 77 views
2

我有多個div代碼與一個垃圾桶圖標。
每個div是指一個唯一的名稱,但垃圾桶圖標功能全部div標籤相同。
當垃圾桶圖標是clicked一個模式顯示(使用foundation.zurb)。
模態是一個form具有兩個input值:OKCancel如何阻止Ajax重複以前的請求?

OK按鈕clicked我想div標籤觸發模式揭示的formsubmit的唯一名稱。這是我有:

$('a#delete-book').on('click', function(event) { 
    console.log('clicked delete'); 
    event.preventDefault(); 

    var school, book, genre, url; 

    var self = $(this); 
    school = $("#school-name").text(); 
    book = self.parent().children('h3').text(); 
    genre = self.parent().children('span').text(); 
    url = '/' + school + '/' + book + '-' + genre; 
    console.log('url:\n', url); 

    //REVEAL MODAL 
    $('#deleteModal.reveal-link').trigger('click'); 

    doesThisWork(self, url); 
    });//DELETE END 

    function doesThisWork(self, url) { 
    console.log(self, url); 

    //EVENT LISTENER ON YES 
    $('form#delete-book-form').on('click', function(mevent) { 
     console.log('delete-book confirmed'); 
     $.ajax({ 
     url: url, 
     type: "DELETE", 
     dataType: "json" 
     }) 
     .done(function() { 
      console.log('delete successful'); 
      self.parent().remove(); 
     }) 
     .fail(function(err) { 
     console.log('error:\n', err); 
     alert('error:\n', err); 
     }) 
    });//DELETE CONFIRM END 
    } 

我想不通爲什麼當我刪除另一本書前面的AJAX請求被提交一次。
我錯過了event.preventDefault()的地方嗎?

有什麼建議嗎?

+0

你可以提供一個小提琴或plunkr? – vianney

回答

2

我首先想到的是你綁定事件多次到形式#刪除圖書形式元素(每點擊一個一個#刪除圖書元素):

$('form#delete-book-form').on('click', function(mevent) 

所以每當你這樣做,一個新的處理程序將被附加到點擊事件。你可以試試你的。對語句之前解除綁定就行了事件,以刪除以前的綁定:

$(「#形式刪除圖書形式」)。 off('click');