.net 驗證控制項和javaScript的衝突問題

來源:互聯網
上載者:User

在做東西的時候偶爾同時用到javascript的事件和.net的驗證控制項,具體細節如下:
<head runat="server">
    <title>Untitled Page</title>
    <script language="javascript" type="text/javascript">
    var IsDetailsModifed = true
    function SubmitDetailModified()
        ...{
            var retvalue;
            if (IsDetailsModifed == true)
            ...{
               retvalue = confirm("Do you want to save?);
            }
            else
            ...{
            alert("No need to save because of no field modified.");
            retvalue = false
            }
            return retvalue;
           
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:TextBox ID="txtTest" runat="server" Width="80px"></asp:TextBox>
    <asp:RegularExpressionValidator ID="RegularExpressionValidator4" runat="server" ControlToValidate="txtTest"
            ErrorMessage="Test must be Numeric"  ValidationExpression="^[0-9]{1,28}.?[0-9]{0,4}$">*</asp:RegularExpressionValidator>
        <asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="return SubmitDetailModified()" />
        <asp:ValidationSummary ID="ValidationSummary1" runat="server" ShowMessageBox="true" ShowSummary="false" />
    </div>
    </form>
</body>
上面的意圖是,在點擊按鈕的時候彈出一個確認框,如果選擇是則繼續回傳,否則阻止回傳。在回傳過程中如果某個欄位的驗證不通過,ValidationSummary 應該彈出訊息框來阻止該回傳.
但是事與願違,當我單擊按鈕的時候,如果選擇‘否’,阻止回傳,正常。
但當我選擇‘是’的時候,有兩種情況:
1. 所有欄位的驗證都通過,然後點擊‘是’,頁面繼續回傳,一切正常。
2. 當有欄位的驗證不通過的時候,點擊‘是’,驗證訊息不會彈出來,而且頁面會繼續回傳,導致操作資料不正確。
為什麼驗證訊息框會彈不出來呢?
後來,瞭解到.net驗證控制項的機制就是通過javascript來返回true或false來控制頁面是否回傳的。在上面的代碼中,如果選擇‘是’,直接在按鈕的點擊事件中返回true,頁面當然要回傳了。後來發現驗證控制項是通過給event.returnValue=true/false來實現阻止與否的。於是我改寫了My Code如下:
<head runat="server">
    <title>Untitled Page</title>
    <script language="javascript" type="text/javascript">
    var IsDetailsModifed = true
    function SubmitDetailModified()
        ...{
            var retvalue;
            if (IsDetailsModifed == true)
            ...{
               retvalue = confirm("Do you want to save ?");
            }
            else
            ...{
            alert("No need to save because of no field modified.");
            retvalue = false
            }
            if (retvalue == false)
            ...{
              event.returnValue = retvalue;
            }
           
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:TextBox ID="txtTest" runat="server" Width="80px"></asp:TextBox>
    <asp:RegularExpressionValidator ID="RegularExpressionValidator4" runat="server" ControlToValidate="txtTest"
            ErrorMessage="Test must be Numeric"  ValidationExpression="^[0-9]{1,28}.?[0-9]{0,4}$">*</asp:RegularExpressionValidator>
        <asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="SubmitDetailModified()" />
        <asp:ValidationSummary ID="ValidationSummary1" runat="server" ShowMessageBox="true" ShowSummary="false" />
    </div>
    </form>
</body>
如果我選擇'是',我什麼都不做,那就是預設的繼續回傳,但是如果有驗證不通過的欄位,驗證控制項通過event.returnValue=false來阻止頁面繼續回傳,這樣頁面就會跳出驗證不通過的對話方塊。如果我選擇‘否’,我也用event.returnValue=false的方法來阻止頁面回傳。這樣的話,就達到了最初的目的。

總結:
在使用.net的驗證控制項的時候,不要再事件中直接return true or false,而是通過event.returnValue=true/false來實現頁面的回傳阻止。

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/kucool/archive/2008/02/27/2124024.aspx

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.