2012-06-26 32 views
0

我有一個項目表,它有一列鏈接,可以點擊打開一個浮動菜單。我還有一個側邊欄鏈接,它將執行一個ajax請求並對結果進行排序(它使用新表格重新填充表)。當表結果沒有被排序(通過ajax調用重新填充)時,鏈接工作正常。但是,當我排序結果並執行ajax請求時,表中的鏈接不再起作用。Ajax破壞.on('click',eventhandler)

我想知道如何保留錶鏈接內的點擊事件?我認爲jQuery的.on(選擇器,事件處理程序)會照顧到這一點,但在我的情況下似乎並非如此。

enter image description here

這是我目前對錶有鏈接點擊事件:

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

回答

2

當你的T能夠重新填充,這些鏈接的相應DOM節點被刪除。所以做他們所有的事件處理程序。你應該鉤到某個父元素上,例如你的表。從那裏你可以捕捉到傳播的事件。

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

請參見「直接和委託的事件」在這裏:http://api.jquery.com/on/

+0

我嘗試了父母進一步回事,不被替換的DOM,但後來我的麻煩是處理鏈接對象被傳遞到menuShow(menuParent)沒有被正確地傳入。$('。addSet')。on()維護我傳入該函數的點擊鏈接,但是所有的節點在ajax調用之後被移除。 – SCS

+0

@SCS,事件處理程序收到'event'參數。您可以在事件處理程序中使用'event.target'來獲取'.addStaff'元素引用。 – Niemand

+0

太棒了,工作。謝謝! – SCS

1

變化

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

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