0

クリックしてフローティングメニューを開くことができるリンクの列を持つアイテムのテーブルがあります。また、ajaxリクエストを実行し、結果を並べ替えるサイドバーリンクもあります(テーブルに新しいテーブルが再入力されます)。テーブルの結果がソートされていない場合(ajax呼び出しによって再入力されていない場合)、リンクは正常に機能します。ただし、結果を並べ替えてajaxリクエストを実行すると、テーブル内のリンクが機能しなくなります。

テーブルリンク内のクリックイベントをどのように保持できるのか疑問に思いましたか?jQueryの.on(selector、eventhandler)がこれを処理すると思いましたが、私の状況ではそうではないようです。

ここに画像の説明を入力してください

これは、テーブルリンクのクリックイベントに対して現在持っているものです。

  $('.addSet').on('click', function(event) {
    event.stopPropagation();
    return menuShow(this);
  });

  $('.addSetMenu input, .addSetMenu select, .addSetMenu').on('click', function(event) {
    return event.stopPropagation();
  });

  menuShow = function(menuParent) {
    var menu, parentLeft, parentOffset, parentTop;
    menu = $(menuParent).siblings('.addSetMenu');
    parentOffset = $(menuParent).offset();
    parentTop = parentOffset.top;
    parentLeft = parentOffset.left;
    $(menu).css({
      'top': parentTop + 20,
      'left': parentLeft - 160
    });
    resetMenu();
    return $(menu).toggleClass('hide');
  };

  $('html, .setCancelBtn').on('click', function() {
    return resetMenu();
  });

  resetMenu = function() {
    var menu;
    menu = $('.addSetMenu input[type=text]');
    $('.addSetMenu select').val('default');
    $(menu).addClass('hide');
    $(menu).val('');
    return $('.addSetMenu').addClass('hide');
  };
4

2 に答える 2

2

テーブルが再作成されると、それらのリンクの対応するDOMノードが削除されます。したがって、すべてのイベントハンドラーを実行します。テーブルなどの親要素にフックする必要があります。そしてそこから、伝播されたイベントをキャッチできます。

$('table-selector').on('click', 'urlSelector', function(event) {
    //handler code
})

ここの「直接および委任されたイベント」を参照してください:http://api.jquery.com/on/

于 2012-06-26T20:50:06.380 に答える
1

変化する

$('.addSet').on('click', function(event) {
  //some code
});

$(document).on("click",".addSet", function(event) {
  //some code
});
于 2012-06-26T20:42:16.567 に答える