Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rebinding events in jQuery after Ajax update (updatepanel)

I have several input and option elements on my page, each (well almost) have an event attached to update some text on the page once they change. I use jQuery which is really really cool :)

I also use Microsofts Ajax framework, utilizing the UpdatePanel. The reason why I do that is that certain elements are created on the page based on some server-side logic. I don't really want to explain why I use the UpdatePanel - even if it could (it can with quite some effort) be rewritten to use only jQuery I still want that UpdatePanel.

You probably guessed it - once I have a postback on the UpdatePanel the jQuery events stops working. I actually was expecting this, since the "postback" is not really a new postback so my code in document.ready that binds the events won't be fired again. I also confirmed my suspicion by reading up on it in the jQuery help libraries.

Anyway I'm left with the problem of rebinding my controls after the UpdatePanel is done updating the DOM. I preferably need a solution that does not require adding more .js files (jQuery plug-ins) to the page but something as simple as being able to catch the UpdatePanel's 'afterupdating' where I can just call my method to rebind all the form elements.

like image 755
Per Hornshøj-Schierbeck Avatar asked Nov 19 '08 10:11

Per Hornshøj-Schierbeck


3 Answers

Since you're using ASP.NET AJAX, you'll have access to a pageLoad event handler, that gets called each time the page posts back, be it full or partial from an UpdatePanel. You just need to put the function in to your page, no hooking up is required.

function pageLoad(sender, args) {    if (args.get_isPartialLoad())    {        //Specific code for partial postbacks can go in here.    } } 
like image 101
Phil Jenkins Avatar answered Oct 06 '22 13:10

Phil Jenkins


Or you could check the latest jQuery's live functionality via the on() method.

like image 29
George Avatar answered Oct 06 '22 12:10

George


Sys.Application.add_load(initSomething);
function initSomething()
{
  // will execute on load plus on every UpdatePanel postback
}
like image 34
Paulius Avatar answered Oct 06 '22 14:10

Paulius