Понял .... Я получил это работает ...
Добавление явного вызова к нажатию кнопки в событии onblur является неправильным, поскольку событие onblur может произойти в любое время, например, когда пользователь переходит в другое текстовое поле или щелкает в любом месте формы и т. Д. (Как упомянуто Кори Оггурном в комментариях выше ). Таким образом, нажатие кнопки будет выполнено, хотя пользователь фактически не нажал кнопку.
Итак, в событии onblur должен быть способ идентифицировать, что на отправку нажимают, и если это происходит, то явно нажать кнопку. Вот код,
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
<script language="javascript" type="text/javascript">
var clicked = 0;
function onTextBoxBlur()
{
alert("On blur " + clicked);
if(1 == clicked)
{
clicked = 0;
document.getElementById("Button1").click();
}
return true;
}
function SubmitButtonClicked()
{
clicked = 1;
}
</script>
</head>
<body>
<form id="form1" runat="server" >
<div>
</div>
<asp:TextBox ID="TextBox1" runat="server" onfocusout="onTextBoxBlur();"></asp:TextBox>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" onmousedown="SubmitButtonClicked();" />
</form>
</body>
</html>
Здесь, при событии mousedown кнопки, которое происходит перед onblur текстового поля, я установил значение флага clicked
и в onblur текстового поля теперь я могу определить, если кнопка нажата или нет.
Но , опять же, это всего лишь обходной путь и хорошо для такого примера приложения :). На практике это менее осуществимо, потому что в веб-форме может быть больше таких кнопок отправки, и нам придется запускать событие нажатия всех таких кнопок (ссылок и т. Д.) В событии onblur текстового поля. Это связано с тем, что пользователь может нажать любую из кнопок отправки (ссылки и т. Д.) После ввода данных в текстовое поле, и оповещение / подтверждение в onblur собирается подавить эти события щелчка. Надеюсь, я ясно.
Наслаждайтесь !!!