Возникает порой необходимость вызвать свой JavaScript по нажатию на кнопку страницы. Например, создаем проект ASP.NET Web Site в Visual Studio 2005, кладем на форму TextBox, Button и RequiredFieldValidator. У RequiredFieldValidator выставляем TextBox в свойстве ControlToValidate и «*» для Text.
Затем у Button прописываем OnClientClick как 'alert("Событие")'. После этого запускаем сайт. Нажимаем Button и получаем ожидаемый диалог «Событие», а после него срабатывание валидатора.
Иногда нужно вызвать свой скрипт уже после проверки валидаторами страницы. Для этого делаем следующее:
- Очищаем OnClientClick.
- Заводим переменную var oldClick = null; в JavaScript. Данная переменная будет хранить старый указатель на обработчик onClick кнопки Button1.
- Создаем функцию для валидации, вызова нашего кода и вызова старого обработчика:
function goNext()
{
if (typeof(Page_ClientValidate) == 'function')
if(Page_ClientValidate())
{
alert("‘Сообщение");
if (oldClick)
oldClick();
}
} - Делаем функцию для «перехвата» старого обработчика:
function formRealPostBack(buttonID)
{
var requestButton;
requestButton = document.getElementById(buttonID);
if (requestButton.onClick)
{
oldClick = requestButton.onClick;
}
else
{
if (requestButton.onclick)
oldClick = requestButton.onclick;
}
requestButton.onClick = goNext;
requestButton.onclick = goNext;
} - Вызываем «перехватчик»:
<asp:Button ID="Button1" runat="server" Text="Button" /><script language="javascript" type="text/javascript"> formRealPostBack("<%= Button1.ClientID %>") </script>
В результате сначала будет произведена проверка TextBox, а затем выполнится наш код.
Спасибо! очень помогло!
ReplyDeleteСпасибо! Помогло! Только на мой взгляд так лучше будет:
ReplyDeletefunction SendMessageLaterValidation()
{
var isValid = true;
if (typeof(Page_ClientValidate) == 'function')
isValid = Page_ClientValidate();
if (isValid)
{
//То что должно происходит если валидация прошла.
}
}
Нажать
Спасибо! Помогло! Только на мой взгляд так лучше будет:
Deletefunction SendMessageLaterValidation()
{
var isValid = true;
if (typeof(Page_ClientValidate) == 'function')
isValid = Page_ClientValidate();
if (isValid)
{
//То что должно происходит если валидация прошла.
}
}
asp:LinkButton ID="Button1" runat="server" OnClientClick="SendMessageLaterValidation()">Нажать</asp:LinkButton