2009-04-17 51 views

回答

10

您可以挖掘到PageRequestManager endRequestEvent:

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(){}); 

或者如果它是控制你試圖附加的事件,你可以使用jQuery live events

另一種選擇是手動執行事件委派。這就是「活」事件在封面上所做的事情。將事件處理程序附加到文檔本身,然後有條件地執行您的方法,如果事件的發件人是您期望的元素。

$(document).click(function(e){ 
    if($(e.target).is(".collapseButton")){ 
     $(this).find(".collapsePanel").slideToggle(500); 
    } 
}) 
+0

感謝您的工作,猜測它不是有效的,但它只爲這一頁。 – Blankman 2009-04-17 15:47:55

6

我想從'部分頁面回傳'你在Asp.net土地工作。

使用

Sys.Application.add_load(function() { }); 

您應該仍然能夠使用FUNC內一切正常jQuery的東西嘗試。

+0

沒錯。這正是MS發明load事件的原因:他們知道在部分回發後他們會吹走DOM元素,並且他們需要爲開發人員提供一種在頁面準備就緒時執行某些操作的方法,而不管是否使用了花哨的AJAX UpdatePanel或不。 – JPot 2009-04-17 19:09:30

+0

完美。這個伎倆。只需直接調用我的相同設置方法並通過此事件即可完成。乾杯! – 2012-07-19 13:36:11

0

當您進行部分回發時,某些DOM元素會被替換,當然,新元素將會失去jQuery綁定。您可以使用ScriptManager類註冊將在部分回發完成後執行的腳本(看看here

2

查看jQuery 1.3 here的「live」功能。您可以將事件添加到未來的元素以及頁面上的當前元素。這可能會簡化您需要編寫的代碼。

0

(使用jQuery 2.x的)最優雅的解決方案是這樣的:

使用 「上」 的事件。確保將事件綁定到文檔而不是元素本身!

代碼示例:

$(document).on('click', 'div.messages', function() { 
    console.log('click on div.messages'); 
    return false; 
}); 

將這個代碼轉換成的document.ready例如。

即使在UpdatePanel中更改或創建了div.messages,它也能正常工作。它永遠不會一次被解僱兩次或更多次。沒問題。

相關問題