【问题标题】:Javascript checking if page is validJavascript 检查页面是否有效
【发布时间】:2010-10-12 17:21:26
【问题描述】:

在我的提交按钮上,我想做的是 OnClick 显示一个“请稍候”面板并隐藏按钮,除非验证器说某些内容无效 - 然后我需要按钮仍然明显显示。否则我有一个显示错误的验证摘要,无法再次提交。

我发现的大多数关于这样做的文章都想使用 Page_ClientValidate() 函数来告诉页面进行自我验证,但这对我来说是未定义的,Page_IsValid 变量也是如此。这是我正在尝试使用的功能 - 我错过了什么?:

function PleaseWaitShow() {
    try {
        alert("PleaseWaitShow()");

        var isPageValid = true;

        // Do nothing if client validation is not active
        if (typeof(Page_Validators) == "undefined") {
            if (typeof(Page_ClientValidate) == 'function') {
                isPageValid = Page_ClientValidate();
                alert("Page_ClientValidate returned: " + isPageValid);
                alert("Page_IsValid=" + Page_IsValid);
            } else {
                alert("Page_ClientValidate function undefined");
            }
        } else {
            alert("Page_Validators undefined");
        }

        if(isPageValid) {
            // Hide submit buttons
           document.getElementById('pnlSubmitButton').style.visibility = 'hidden';
           document.getElementById('pnlSubmitButton').style.display = 'none';

           // Show please wait panel
           document.getElementById('pnlPleaseWait').style.visibility = 'visible';
           document.getElementById('pnlPleaseWait').style.display = 'block';
       } else {
           alert("page not valid - don't show please wait");
       }
   } catch(er) {
       alert("ERROR in PleaseWaitShow(): " + er);
   }
}

【问题讨论】:

标签: asp.net javascript validation


【解决方案1】:

将此行“if (typeof(Page_Validators) == "undefined")”更改为 if (typeof(Page_Validators) != "undefined")

【讨论】:

    【解决方案2】:

    根据“ASP.NET Validation in depth”页面上的“客户端 API”部分:

    Page_IsValid |布尔变量 |指示页面当前是否有效。验证脚本始终保持最新状态。

    确实,在启用了 ASP.NET 客户端验证的表单上查看 FireBug 中的这个变量时,当我填写表单的详细信息(错误或正确)时,它确实会更新。

    显然,如果您在验证器或验证摘要上禁用了客户端脚本,那么您将无法使用此变量。

    【讨论】:

    • 在我的按钮上单击我添加了:alert(typeof(Page_IsValid));返回“未定义”
    【解决方案3】:

    检查一下

    if(Page_IsValid)
    {
        //Yourcode
    }
    

    如果您在页面中有验证器(不包括验证摘要),则此方法有效。

    【讨论】:

      【解决方案4】:

      Page_ClientValidate() 不是我所知道的任何标准 javascript 函数

      【讨论】:

      【解决方案5】:

      我相信我已经找到了“某种”的答案。

      我仍然无法确定为什么我的页面无法识别“Page_ClientValidate()”或“Page_IsValid” - 这部分仍未得到答复。

      但是,我在页面上使用了许多 PeterBlum 验证器,它们确实提供了返回 true/false 的“VAM_ValOnSubmit()”。所以这可能是解决方案。我可能只需要确保所有验证者都是 PeterBlum 才能全部捕获。

      不是最好的解决方案,但比我目前得到的要好。我仍然对“Page_IsValid”部分的答案持开放态度。

      【讨论】:

        【解决方案6】:

        有一个关于这个主题的 ASP.Net 论坛帖子:Button that prevents multiple clicks

        这是解决方案(在后面的代码中):

        private void BuildClickOnceButton(WebControl ctl)
        {
            System.Text.StringBuilder sbValid = new System.Text.StringBuilder();
            sbValid.Append("if (typeof(Page_ClientValidate) == 'function') { ");
            sbValid.Append("if (Page_ClientValidate() == false) { return false; }} ");
            sbValid.Append(ctl.ClientID + ".value = 'Please wait...';");
            sbValid.Append(ctl.ClientID + ".disabled = true;");
            //GetPostBackEventReference obtains a reference to a client-side script function that causes the server to post back to the page.
            sbValid.Append(ClientScript.GetPostBackEventReference(ctl, ""));
            sbValid.Append(";");
            ctl.Attributes.Add("onclick", sbValid.ToString());
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-28
          • 2011-03-30
          • 2012-04-19
          • 2017-10-22
          • 1970-01-01
          • 2010-11-07
          相关资源
          最近更新 更多