Смотрите на Входная обработка в WinForm
, я отправил свое решение, которое использует события ProcessCmdKey и OnKeyPress на текстовом поле. Комментарии показывают Вам, как использовать Regex, чтобы проверить нажатие клавиши и блокировать/позволять соответственно.
Спасибо, @Ken Browning и @russau за то, что указали мне направление взлома __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
своим собственным, чтобы запускать события отправки.
Iirc,
Я не знаю, как это сделать с помощью jQuery, но вы можете добавить свойство OnClientClick в элемент управления ASP.NET:
<asp:linkbutton id="TestButton" text="Click me!" runat="server" OnClientClick="alert('Submit detected.');" />
Я добился успеха с решением с переопределением __ doPostBack ()
, чтобы вызвать переопределение для form.submit ()
(например, $ ('form: first'). submit (myHandler)
), но я думаю, что это чрезмерно спроектировано. Что касается ASP.NET 2.0, наиболее простым решением является следующее:
Определите функцию javascript, которую вы хотите запускать при отправке формы, т.е.
Зарегистрируйте свою функцию-обработчик в своем внутреннем коде, т.е.
защищенное переопределение void OnLoad (EventArgs e)
{
base.OnLoad (e);
ScriptManager.RegisterOnSubmitStatement (Страница, Page.GetType (),
«myHandlerKey», «myhandler ()»);
}
Вот и все! myhandler ()
будет вызываться как при прямом нажатии кнопки, так и при автоматическом вызове __ doPostBack ()
.