Thanks, @Ken Browning and @russau for pointing me in the direction of hijacking __doPostBack
.
I’ve seen a couple of different approaches to this:
- Hard-code my own version of
__doPostBack
, and put it later on the page so that it overwrites the standard one. - Overload
Render
on the page and inject my own custom code into the existing__doPostBack
. - Take advantage of Javascript’s functional nature and create a hook for adding functionality to
__doPostBack
.
The first two seem undesirable for a couple of reasons (for example, suppose in the future someone else needs to add their own functionality to __doPostBack
) so I’ve gone with #3.
This addToPostBack
function is a variation of a common pre-jQuery technique I used to use to add functions to window.onload,
and it works well:
addToPostBack = function(func) {
var old__doPostBack = __doPostBack;
if (typeof __doPostBack != 'function') {
__doPostBack = func;
} else {
__doPostBack = function(t, a) {
if (func(t, a)) old__doPostBack(t, a);
}
}
};
$(document).ready(function() {
alert("Document ready.");
addToPostBack(function(t,a) {
return confirm("Really?")
});
});
Edit: Changed addToPostBack
so that
- It can take the same arguments as
__doPostBack
. - The function being added takes place before
__doPostBack
. - The function being added can return
false
to abort postback.