jquery needs to rebind events on partial page postback

梦想的初衷 提交于 2019-11-30 20:05:28

You can either tap into the PageRequestManager endRequestEvent:

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

Or if it is control events you're trying to attach, you can use jQuery live events.

Another option is to do the event delegation manually. It is what the "live" event are doing under the covers. Attach the event handler to the document itself, then conditionally execute your method if the sender of the event was element you expect.

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

I'm guessing from 'partial page postback' you're working in Asp.net land.

Try using

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

You should still be able to use all the normal jQuery stuff inside that func.

Check out the "live" feature of jQuery 1.3 here. You can add events to future elements as well as current elements on the page. This may simplify the code you'll need to write.

ybo

Some DOM elements are replaced when you do a partial postback, and of course, the new elements will loose jQuery bindings. You can use the ScriptManager class to register a script that will be executed after the partial postback finishes (have a look here)

The most elegant solution (using jQuery 2.x) is this:

Use the "on" event. Make sure you bind the event to the document and not to the element itself!

Code example:

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

Put this code into document.ready for example.

This works even if div.messages is changed or created inside an UpdatePanel. And it is never fired twice or more times at once.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!