2012-04-05 44 views
1

我有一個AJAX調用這樣:Javascript或jQuery緩存我的JavaScript變量。我該如何重設?

$('a.delete_task').live('click', function() { 
     $this = $(this); 

     function deleteFunction(){    

     var obj = $this.parents('.task'); 
     $(obj).addClass('highlighted'); 

     $.post($this.attr('href'), { _method: 'delete' }, function(data) { 
      if ($single_item_collection == true) { 
      } else { 
      }; 
     }); 
     }; 

     SSK.confirm_delete($this, deleteFunction, "task"); 
     return false; 
    }); 

然後,我把我的deleteFunction(),把它扔進了delete_confirmation

$(function(){ 
    window.SSK = new(Class.extend({ 
    confirm_delete: function(obj, action, label){ 
    $(".confirm-deletion").live("click", function(){ 
     action.call(obj); 
     $(this).parents("#delete-message").fadeOut(); 
     return false; 
    }); 
    }, 

的問題是,當我點擊它的第一次它的工作原理。當我第二次點擊它時,它通過第一個$(this),第二個$(this)。同樣,當我第三次點擊另一個項目時,它會嘗試並通過所有三個項目,依此類推。不知何故,它緩存$(this)。像那樣瘋狂。每當該方法再次通過時傳遞它。

確認刪除作爲函數創建一個彈出窗口,並將您最初單擊的鏈接的方法作爲變量obj傳遞給它。

然後,如果你點擊確認它這樣做:

$(".confirm-deletion").live("click", function(){ 
     action.call(obj); 
     $(this).parents("#delete-message").fadeOut(); 
     return false; 
    }); 
+1

confirm_delete是做什麼的? – Paulpro 2012-04-05 13:20:15

+1

你可以包含更多的代碼嗎?這聽起來像你每次綁定一個新的點擊處理程序,因此每次附加一個附加的處理程序。然後點擊它會觸發所有的點擊。 – 2012-04-05 13:28:28

回答

1

每當用戶單擊「delete_task」時,您正在向「確認刪除」元素添加單擊事件。這就是點擊事件觸發多次的原因,它實際上是多次添加的。

1

不,這肯定不是瘋了緩存。閱讀https://developer.mozilla.org/en/JavaScript/Reference/Operators/this並重寫confirm_delete和/或deleteFunction

我確定您需要將$(this)放在click-handler closure中的緩存值中,然後在deleteFunction中使用。

+0

我將$(this)轉換爲$ this,現在它發送的**相同的**事件多次,因爲我點擊了頁面。因此,不是第3次點擊的過去3,它通過了3次當前事件。 – Trip 2012-04-05 13:41:29

+0

$這是您在給我們的代碼片段中未定義的。 – Bergi 2012-04-05 13:45:00

+0

更新了我的好朋友。 – Trip 2012-04-05 13:55:40