我有一个带PostBackUrl的按钮。 此外,我还为其onclientclick方法分配了一个函数,其中编写了一些页面逻辑,包括一些验证规则。 如果整个页面无效,则此方法返回False,但我无法停止页面。我尝试过document.execCommand('Close')和Window.Stop()但没有成功。
有什么建议吗?
编辑: 按钮:
<asp:Button ID="btnSubmit" runat="server" OnClientClick="return DoLogic()" PostBackUrl="http://google.com" Class="btn_submit"/>
DoLogic:
function DoLogic() {
if (ValidateForm()) {
blah blah blah
return true;
}
else {
alert("Has Error");
return false;
}
ValidateForm:
function ValidateForm(){
if (haserror)
{
return false;
}
return true;
}
答案 0 :(得分:3)
您可以在活动中使用.preventDefault()
方法。这将在单击按钮时停止页面加载的默认操作。
http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-flow-cancelation
您也可以在return false;
内DoLogic()
。这也将停止页面加载。
onclientclick="return DoLogic()"
然后在你的函数中:
function DoLogic(){
//blah blah blah
return false;
}
<强>更新强>
如果你正在做所有这些并且仍然遇到问题,请尝试将其添加到按钮:
onclick="javascript:return false"
从OP更新
您的代码无法正常工作,因为在if语句中您return true;
并且只有在狗屎遇到粉丝时才会返回false(即错误)。你需要每次都返回false。或者像我之前提到的那样使用.preventDefault()
。
答案 1 :(得分:1)
我已经读过PostBackUrl可以给你带来麻烦,特别是在这种情况下,因为它看起来你错了。我想你可能会对PostBackUrl的作用感到困惑。它是跨页面发布中使用的属性。如果您在回发完成后尝试将用户重定向到其他页面,请在代码隐藏中使用Response.Redirect()
或使用<asp:HyperLink>
标记。
没有理由不能使用Response.Redirect()
。只需将其添加到代码隐藏中的脚本末尾即可。如果客户端验证返回false,则生命周期无论如何都不会到达服务器端。
总而言之,您在该控件中至少有三个错误:
return
属性的OnClientClick
部分。Class
属性更改为CssClass
。PostBackUrl
以外的内容。 您可以在此处详细了解:
如果您在代码执行完毕后尝试将用户发送到其他站点,则PostBackUrl
属性不能以您向我们展示的方式使用。例如,在您的示例中,即使它确实有效,用户也可能会看到: