Javascript检查页面是否有效

时间:2009-03-11 16:07:05

标签: asp.net javascript validation

在我的提交按钮上,我想要做的是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);
   }
}

6 个答案:

答案 0 :(得分:8)

更改此行“if(typeof(Page_Validators)==”undefined“)”to if(typeof(Page_Validators)!=“undefined”)

答案 1 :(得分:5)

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

  

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

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

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

答案 2 :(得分:4)

请检查

if(Page_IsValid)
{
    //Yourcode
}

如果您在页面中有验证器,这将排除验证摘要。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

我相信我找到了一种“某种”答案。

我仍然无法确定为什么我的网页无法识别“Page_ClientValidate()”或“Page_IsValid” - 此部分仍无法回答。

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

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

答案 5 :(得分:0)

有关于此主题的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());
}