Javascript 从客户端处理程序返回false不会阻止回发
我在WebForms页面上有以下按钮:Javascript 从客户端处理程序返回false不会阻止回发,javascript,jquery,asp.net,webforms,Javascript,Jquery,Asp.net,Webforms,我在WebForms页面上有以下按钮: <asp:Button ID="btnNewProgramNext" runat="server" Text="Next >>" /> 我有下面的javascript/jquery来处理它的事件 $('#<%= btnNewProgramNext.ClientID %>').on('click', function (e) { var errorMessage = ''; var o
<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;
});
$('#')。在('click',函数(e){
var errorMessage='';
var-ok=false;
var newCompany=$('#').val();
如果(新公司==1){
if(!$('#').val())
errorMessage='您必须输入公司名称';
else if(!$('#').val())
errorMessage='您必须输入联系人的名字';
else if(!$('#').val())
errorMessage='您必须输入联系人的姓氏';
其他的
ok=正确;
}
否则{
//做点别的
ok=正确;
}
$('newProgramErrorMessage')。文本(errorMessage);
返回ok;
});
问题是,当此处理程序返回false时(当ok
为false时,或者当我将最后一行更改为return false
时),回发仍然发生
有什么技巧可以阻止javascript的回发吗?我希望这能起作用。为什么不尝试通过
ClientClick
属性将其连接起来,而不是使用jQuery订阅click事件呢。这可能是ASP.NET用于确定是否终止回发的路由。您需要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.
});
$('#')。在('click',函数(e){
var errorMessage='';
var-ok=false;
var newCompany=$('#').val();
如果(新公司==1){
如果($('#').val()=“”)
errorMessage='您必须输入公司名称';
else if($('#').val()=“”)
errorMessage='您必须输入联系人的名字';
else if($('#').val()=“”)
errorMessage='您必须输入联系人的姓氏';
其他的
ok=正确;
}否则{
//做点别的
ok=正确;
}
如果(!ok){
e、 预防默认值();
$('newProgramErrorMessage')。文本(errorMessage);
}
//否则一切都是有效的,所以发回服务器。
});
使用OnClientClick
实际上是可行的。还在研究为什么我不能在这里使用jQuery。我认为这是显而易见的。我打赌默认情况下,除非标记中声明了OnClientClick
,否则它将返回true
。ASP.NETWebForms是在jQuery之前创建的,不知道如何查找其他路径。只需将JavaScript声明为一个离散函数,并从OnClientClick
调用它。我不清楚的是,返回false在常规HTML中如何工作?它会阻止对操作的进一步处理。它不依赖于WebForms。那么为什么这里需要WebForms呢?关于这一点,确实有很多令人困惑的信息。根据对的主要回答,“从jQuery事件处理程序中返回false实际上与对传递的jQuery.event对象调用e.preventDefault和e.stopPropagation相同。”您所述的信息对于常规html控件是正确的。在OP中,您使用的是ASP.Net服务器控件,它有自己的javascript回发到服务器。理想情况下,如果您使用ASP.Net服务器控件(Garrison Neely回答),您希望使用ClientClick。这是你的电话号码