我在WebForms页面上有以下按钮:
<asp:Button ID="btnNewProgramNext" runat="server" Text="Next >>" />
我有以下javascript / jquery来处理它的事件。
$('#<%= btnNewProgramNext.ClientID %>').on('click', function (e) {
var errorMessage = '';
var ok = false;
var newCompany = $('#<%= NewCompanyMode.ClientID %>').val();
if (newCompany == 1) {
if (!$('#<%= txtProgramCompanyName.ClientID %>').val())
errorMessage = 'You must enter a company name.';
else if (!$('#<%= txtContactFirstName.ClientID %>').val())
errorMessage = 'You must enter a contact first name.';
else if (!$('#<%= txtContactLastName.ClientID %>').val())
errorMessage = 'You must enter a contact last name.';
else
ok = true;
}
else {
// Do something else
ok = true;
}
$('#newProgramErrorMessage').text(errorMessage);
return ok;
});
问题是,当此处理程序返回false时(当ok
为false时,或者当我将最后一行更改为return false
时),仍会发生回发。
是否有任何阻止javascript回发的技巧?我希望这能奏效。
答案 0 :(得分:2)
您需要e.preventDefault()才能取消按钮点击事件。
$('#<%= btnNewProgramNext.ClientID %>').on('click', function (e) {
var errorMessage = '';
var ok = false;
var newCompany = $('#<%= NewCompanyMode.ClientID %>').val();
if (newCompany == 1) {
if ($('#<%= txtProgramCompanyName.ClientID %>').val() == "")
errorMessage = 'You must enter a company name.';
else if ($('#<%= txtContactFirstName.ClientID %>').val() == "")
errorMessage = 'You must enter a contact first name.';
else if ($('#<%= txtContactLastName.ClientID %>').val() == "")
errorMessage = 'You must enter a contact last name.';
else
ok = true;
} else {
// Do something else
ok = true;
}
if (!ok) {
e.preventDefault();
$('#newProgramErrorMessage').text(errorMessage);
}
// else everything is valid, so post back to server.
});
答案 1 :(得分:1)
为什么不尝试通过ClientClick
属性挂钩,而不是使用jQuery订阅click事件。这可能是ASP.NET用来确定是否杀死PostBack的路径。