JavaScript检查页面是否有效

8
在我的提交按钮上,我想要实现的功能是,在单击后显示一个“请稍候”面板并隐藏按钮,除非验证器说有些地方无效 - 那么我需要按钮仍然保持显示状态。否则,我会显示错误的验证摘要,没有办法再次提交。
大多数我找到的关于此操作方式的文章都希望使用 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验证器一起使用? - Quintin Robinson
我正在使用ASP.NET验证器以及一些PeterBlum验证器。另外,这是我发布的函数来源: http://www.experts-exchange.com/Programming/Languages/.NET/ASP.NET/Q_22426849.html - Chad
6个回答

8
将这行代码修改为"if (typeof(Page_Validators) != "undefined")":

5
根据 "ASP.NET Validation in depth" 页面的 "客户端 API" 部分:
Page_IsValid | 布尔变量 | 表示页面当前是否有效。验证脚本始终保持此变量更新。
确实,在启用了 ASP.NET 客户端验证的表单上,使用 FireBug 观察此变量,随着我填写表单的详细信息(不正确或正确),它会得到更新。
显然,如果您已禁用验证程序或验证摘要上的客户端脚本,则此变量对您不可用。

在我的按钮点击事件中,我添加了以下代码:alert(typeof(Page_IsValid));它返回的结果是“undefined”。 - Chad

4

请检查

if(Page_IsValid)
{
    //Yourcode
}

如果页面中有验证器,那么这个方法就有效,但验证摘要不包括在内。

0

关于这个主题,有一个ASP.Net论坛帖子:防止多次点击的按钮

以下是解决方案(在代码后台):

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());
}

0

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


这是ASP.NET Validators提供的一种方法,虽然没有明确说明,但我认为这就是OP所指的。 - Quintin Robinson
没错 - 这就是我得到这些想法的地方(请参见底部): http://www.experts-exchange.com/Programming/Languages/.NET/ASP.NET/Q_22426849.html - Chad

0

我相信我已经找到了一个“有点”答案。

我仍然无法确定为什么我的页面无法识别“Page_ClientValidate()”或“Page_IsValid”,这部分问题仍未解决。

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

虽然不是最好的解决办法,但比我迄今为止得到的要好。我仍然希望得到关于“Page_IsValid”部分的答案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接