1

我有这样的 AJAX 调用:

    $('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;
    });
4

2 回答 2

1

不,这肯定不是疯狂的缓存。阅读https://developer.mozilla.org/en/JavaScript/Reference/Operators/this并重写confirm_delete和/或deleteFunction

我很确定您需要$(this)在 click-handler 闭包中放入一个缓存值,然后在deleteFunction.

于 2012-04-05T13:27:32.453 回答
1

每次用户单击“delete_task”时,您都会向元素“确认删除”添加一个单击事件。这就是点击事件被触发多次的原因,它实际上被添加了多次。

于 2012-12-19T14:11:30.963 回答