javascript - 何时调用服务器 onClick 与 OnClientClick

标签 javascript asp.net

谁能解释一下原因 btnSaveFile1 被点击, onClient点击 () 被调用,如果 onClient点击 () 返回 true 它调用服务器但是如果 onClientClick() 返回 false 它不调用服务器。我完全理解。

但为什么 不是这样? btnSaveFile2 似乎无论如何都不会调用服务器 onClientClick() 返回?

为什么 返回假; 必须内联吗?

<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>

最佳答案

TL;DR:删除 UseSubmitBehavior="false"
更长的解释:

Use the UseSubmitBehavior property to specify whether a Button control uses the client browser's submit mechanism or the ASP.NET postback mechanism. By default the value of this property is true, causing the Button control to use the browser's submit mechanism. If you specify false, the ASP.NET page framework adds client-side script to the page to post the form to the server.



如果您查看页面源代码,onclick渲染按钮不只是 "if(!onClientClick()){return false;}""return onClientClick();" ,因为它必须添加客户端脚本来发布表单。所以现在第一个按钮是:
"if(!onClientClick()){return false;};__doPostBack('ctl00$MainContent$btnSaveFile1','')"

第二个是
"return onClientClick();__doPostBack('ctl00$MainContent$btnSaveFile2','')"

所以你可以看到情况#2,如果它返回true ,它不会到达实际提交表单的脚本。 (按钮 1 不是这种情况,它确实到达了脚本并因此提交了表单)。

关于javascript - 何时调用服务器 onClick 与 OnClientClick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20642419/

相关文章:

asp.net - 将用户配置文件 SQL 数据库导入到 Windows Azure

c# - 获取浏览网站的用户的IP地址

asp.net - 无法将索引 35 处的字节 [FC] 从指定的代码页转换为 Unicode

javascript - 重构 Angular ng-resource 错误处理

javascript - DipleJS - 如何制作图表动画并下载图表

javascript - Android 在动态添加类时与一般兄弟选择器的奇怪行为

javascript - 使用语义发布发布开发版本

c# - 将字符串转换为正确的 URI 格式?

c# - 获取代码隐藏以创建完整的 JS 部分

javascript - 在 JavaScript 中展平多维数组