Javascript 何时调用服务器onClick vs OnClientClick
有人能解释一下为什么单击了btnSaveFile1,调用了onClientClick(),如果onClientClick()返回true,它会调用服务器,但是如果onClientClick()返回false,它不会调用服务器。我完全理解 但是,btnSaveFile2为什么不管onClientClick()返回什么,它似乎都不会调用服务器呢 为什么返回false必须是内联的吗Javascript 何时调用服务器onClick vs OnClientClick,javascript,asp.net,Javascript,Asp.net,有人能解释一下为什么单击了btnSaveFile1,调用了onClientClick(),如果onClientClick()返回true,它会调用服务器,但是如果onClientClick()返回false,它不会调用服务器。我完全理解 但是,btnSaveFile2为什么不管onClientClick()返回什么,它似乎都不会调用服务器呢 为什么返回false必须是内联的吗 <asp:Button ID="btnSaveFile1" runat="server" Text="Save"
<asp:Button ID="btnSaveFile1" runat="server" Text="Save" OnClientClick="if(!onClientClick()){return false;}" OnClick="btnSaveFile_Click" UseSubmitBehavior="false" />
<asp:Button ID="btnSaveFile2" runat="server" Text="Save" OnClientClick="return onClientClick()" OnClick="btnSaveFile_Click" UseSubmitBehavior="false" />
<script type="text/javascript">
function onClientClick() {
if (CurrentMemberValidatedWindow()) {
if (!ValidateForm()) {
return false;
}
}
else {
DeleteInvalidFiles();
return false;
}
return true;
}
</script>
函数onClientClick(){
如果(CurrentMemberValidatedWindow()){
如果(!ValidateForm()){
返回false;
}
}
否则{
DeleteInvalidFiles();
返回false;
}
返回true;
}
TL;DR:删除使用submitbehavior=“false”
详细解释:
使用UseSubmitBehavior属性指定按钮控件
使用客户端浏览器的提交机制或ASP.NET回发
机制。默认情况下,此属性的值为true,导致
按钮控件以使用浏览器的提交机制如果您指定
如果为false,ASP.NET页面框架会将客户端脚本添加到页面中
将表单发布到服务器。
如果查看页面源代码,呈现按钮的onclick
不仅仅是“If(!onClientClick()){return false;}”
或“return onClientClick();”
,因为它必须添加客户端脚本来发布表单。现在,第一个按钮是:
"if(!onClientClick()){return false;};__doPostBack('ctl00$MainContent$btnSaveFile1','')"
第二次是
"return onClientClick();__doPostBack('ctl00$MainContent$btnSaveFile2','')"
因此,您可以在案例2中看到,如果它返回true
,它将不会到达实际提交表单的脚本。(按钮1的情况并非如此,它确实到达脚本并因此提交表单)