2012-10-27 72 views
0

我有一個JavaScript/jQuery函數:的JavaScript運行時刪除功能,避免「多重呼叫」

function deleteRecordByClick(){ 
    $('.deleteRecord').click(function(){ 
     alert("deleting record"); 
     var confirmMsg = confirm('Are you sure you want to delete record?');  
     if(confirmMsg){ 
      alert(idRecordToDelete); // fires the correct id to delete 
      ajaxDeleteRecord(idRecordToDelete); //my own ajax working properly  
     }    
    }); 
} 

從手風琴組中刪除記錄。每個手風琴都是由dinamically創建的,並有一個帶有「.deleteRecord」類的按鈕。現在函數被正確調用,但是如果我添加了N條記錄,當我點擊一個隨機的手風琴時,函數被調用N次,即使數據庫上的刪除顯然只是第一次正確地觸發了,但是我收到了N條確認消息。我打電話的時候,記錄創建功能:

function addNewAccordion(){ 
    //.... my code to add accordion with 
    // <h3 ... class="deleteRecord"> 
    deleteRecordByClick(); //here I call the function 
} 

是否有破壞作用並重新創建它來解決我的問題的方法或更好的東西?謝謝

回答

3

當你每次創建一個手風琴時都運行這個函數,它會爲每個先前創建的手風琴添加另一個事件處理函數。

您可以先創建所有的手風琴,然後調用函數一次,也可以發送到特定的手風琴元素的引用到函數爲每個呼叫:

deleteRecordByClick(accordion); 

在功能你可以使用參考以限制手風琴內搜索:

function deleteRecordByClick(accordion){ 
    $('.deleteRecord', accordion).click(function(){ 
    ... 
} 
+0

'當你每次創建一個accordion'這是不是他的問題時運行的功能,但也猜到 –

+0

我想過這個問題,以及,但你確定調用'click'不會覆蓋任何以前定義的事件?我在[jQuery reference](http://docs.jquery.com/Events/click) – clentfort

+0

@Asad中找不到與此相關的任何內容@Asad只需查看'addNewAccordion'即可。 – clentfort

1

你應該用事件委派:

$(addedAccordion).on('click', '.deleterecord', function(){/*stuff to delete entry here */}) 

裏面的addNewAccordion,而不是將一個監聽器添加到手風琴中的每個元素。

function addNewAccordion() { 
    //.... my code to add accordion with 
    // <h3 ... class="deleteRecord"> 
    // var addedAccordion = ... get a reference to the accordion 
    $(addedAccordion).on('click','.deleterecord', function() { 
     alert("deleting record"); 
     var confirmMsg = confirm('Are you sure you want to delete record?'); 
     if (confirmMsg) { 
      alert(idRecordToDelete); // fires the correct id to delete 
      ajaxDeleteRecord(idRecordToDelete); //my own ajax working properly  
     } 
    }); 
}