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)2回目にクリックすると、1回目と2回目が通過し$(this)ます。同様に、別のアイテムを3回クリックすると、3つすべてをパスしようとします。

どういうわけかそれはキャッシング$(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_deleteand/orを書き換えますdeleteFunction

$(this)クリック ハンドラー クロージャーにキャッシュ値を入力し、deleteFunction.

于 2012-04-05T13:27:32.453 に答える
1

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

于 2012-12-19T14:11:30.963 に答える