2012-04-05 2 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; 
    }); 
    }, 

問題は、私はそれをクリックしたときに初めて、それが動作することです。 2回目にクリックすると、最初の$(this)と2番目の$(this)を通過します。同様に、3回目に別のアイテムをクリックすると、3つのアイテムがすべて試行されます。

何とかキャッシュ$(this)です。それが狂っているように。メソッドが再度渡されるたびにそれを渡します。

関数として削除を確認すると、ポップアップが作成され、最初にクリックしたリンクのメソッドを変数objとして渡します。

次に、あなたが確認]をクリックした場合には、このことを行います

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

confirm_deleteとは何ですか? – Paulpro

+1

もう少しコードを追加できますか?それは、毎回新しいクリックハンドラをバインドしているので、ハンドラが追加されるたびに鳴ります。それをクリックすると、すべてのクリックが発生します。 –

答えて

1

ユーザーが「delete_task」をクリックするたびにclick-eventを要素「confirm-deletion」に追加します。そのため、clickイベントは複数回発生しています。文字通り何度も追加されています。

1

いいえ、それは確かに狂気のキャッシングではありません。 https://developer.mozilla.org/en/JavaScript/Reference/Operators/thisを読んで、confirm_deleteおよび/またはdeleteFunctionを書き換えてください。

$(this)をクリックハンドラクロージャのキャッシュ値に入れて、それをdeleteFunctionに使用する必要があることは間違いありません。

+0

$(this)を$ thisに変えて、今度は**同じ**を私がページをクリックした回数だけ送ります。したがって、3回目のクリックの過去3回ではなく、現在の3回のイベントを通過します。 – Trip

+0

$これはあなたが私たちに与えたコードスニペットでは未定義です。 – Bergi

+0

更新しました。 – Trip

関連する問題