Спасибо, @Ken Browning и @russau за то, что указали мне в направлении угона __doPostBack.
Я видел несколько разных подходов к этому:
- Напечатайте мою собственную версию __doPostBack и поместите ее позже на страницу, чтобы перезаписать стандартную.
- Перегрузите Render на странице и вставьте свой собственный код в существующий __doPostBack.
- Воспользуйтесь преимуществами функциональной природы Javascript и создайте ловушку для добавления функциональности в __doPostBack.
Первые два кажутся нежелательными по нескольким причинам (например, предположим, что в будущем кому-то еще понадобится добавить свои собственные функции в __doPostBack), поэтому я перешел к # 3.
Эта addToPostBack
функция является разновидностью обычной техники pre-jQuery, которую я использовал для добавления функций в window.onload,
, и она хорошо работает:
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?")
});
});
Редактировать: Изменен addToPostBack, чтобы
- может принимать те же аргументы, что и __doPostBack
- добавляемая функция имеет место до __doPostBack
- добавляемая функция может возвращать false, чтобы прервать обратную передачу