【问题标题】:asp.net requiredfieldvalidators, why are they not firing when i have OnClientClick implementedasp.net requiredfieldvalidators,为什么当我实现 OnClientClick 时它们没有触发
【发布时间】:2011-08-02 08:29:01
【问题描述】:

我有一些必填字段验证器。

当我有一个常规的 asp:button 时,一切顺利。

但是,现在我们已经在提交按钮上实现了 OnClientClick 事件:

<asp:Button ID="SaveButton" runat="server" Text="Save changes" OnClick="SaveButton_Click" OnClientClick="return SubmitForm2();" />

submitform2 方法用于设置提交按钮的标题(请稍候)并禁用它以避免双击。

  function SubmitForm2() {
        $("#SaveButton").attr("disabled", "true");
        $("#SaveButton").val("Please wait...");

        __doPostBack("SaveButton", "");
        return true;

    }

但是我们看到的是,当我们运行这段代码时,clientsidevalidators 没有被调用。

是因为我们自己运行__doPostBack,否则其他代码(检查验证器)会被触发吗?

【问题讨论】:

    标签: javascript asp.net validation


    【解决方案1】:

    是的 - 回发正在发生,因为您正在自己做__doPostBack。禁用按钮后,按钮提交的行为会被阻止验证器阻止。

    更好地实现所需功能的一个可能是将 js-timer 设置为短时间以禁用按钮,然后设置更长的时间以启用按钮。例如,

    function SubmitForm2() {
            // disable button after 30 ms
            setTimeout(function() {
                $("#SaveButton").attr("disabled", "true");
                $("#SaveButton").val("Please wait...");
    
                // enable button in 15 seconds so that in case validations are 
                // failed, user can correct and re-submit the page.
                setTimeout(function() {
                   $("#SaveButton").removeAttr("disabled");
                   $("#SaveButton").val("Save");
                }, 15000); 
    
            }, 30);
    
            return true;
        }
    

    使用validator's client side API 可以实现更好的实现。这是对前一个的更简单但更好的修改,

    function SubmitForm2() {
                // disable button after 30 ms
                setTimeout(function() {
                    $("#SaveButton").attr("disabled", "true");
                    $("#SaveButton").val("Please wait...");
    
                    // enable button in 1 second in case validations are 
                    // failed, user can correct and re-submit the page.
                    setTimeout(function() {
                       if (!Page_IsValid) {
                          // validations failed
                          $("#SaveButton").removeAttr("disabled");
                          $("#SaveButton").val("Save");
                       }
                    }, 1000); 
    
                }, 30);
    
                return true;
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-24
      • 1970-01-01
      • 2013-10-09
      • 1970-01-01
      • 2012-10-11
      • 2016-04-23
      • 1970-01-01
      • 2013-02-05
      相关资源
      最近更新 更多