做網(wǎng)頁經(jīng)常要和JavaScript打交道,經(jīng)常要用JavaScript做一些客戶端的驗(yàn)證,但是如果我們的按鈕用的是HTML控件的話,驗(yàn)證通過后無法調(diào)用后臺代碼,如果用服務(wù)器端控件,驗(yàn)證不通過有要刷新頁面,這個(gè)有時(shí)候挺煩人的,能不能讓服務(wù)器段的按鈕調(diào)用客戶端的驗(yàn)證,如果驗(yàn)證成功后在調(diào)用服務(wù)器端的方法,這樣既減少了網(wǎng)路傳輸,給用戶感覺也好。 OnClientClick是客戶端事件方法.一般采用JavaScript來進(jìn)行處理.也就是直接在IE端運(yùn)行.一點(diǎn)擊就運(yùn)行. OnClick事件是服務(wù)器端事件處理方法,在服務(wù)器端,也就是IIS中運(yùn)行.點(diǎn)擊按鈕后,執(zhí)行postback,再運(yùn)行. 如果一個(gè)按鈕上我們同時(shí)有客戶端的OnClientClick方法又有OnClick事件處理方法,如何才能按照正常的邏輯運(yùn)行呢? OnClientClick中我們常用來做一些客戶端的檢測.當(dāng)然放在服務(wù)器也可以做同樣的檢測,但這樣做的代價(jià)是與服務(wù)器進(jìn)行交互,消耗資源。 例: test()為一javascript函數(shù). <script type="text/javascript"> t1為一文本框,判斷輸入內(nèi)容是否為空 <asp:TextBox ID="t1" runat="server"></asp:TextBox> <asp:Button ID="Button1" runat="server" Text="提交" OnClientClick="return test()" onclick="Button1_Click" /> 需要注意的是當(dāng)我們當(dāng)擊這個(gè)按鈕時(shí),自動(dòng)先執(zhí)行的客戶端,再執(zhí)行服務(wù)器端的.如果客戶端返回的是false,那么服務(wù)器端對應(yīng)的方法永遠(yuǎn)不會(huì)執(zhí)行.這樣就達(dá)到檢測,只有通過才去執(zhí)行服務(wù)器端的方法. 也就是說如果我們上面寫成: <asp:Button ID="Button1" runat="server" Text="提交" OnClientClick="test();return false" onclick="Button1_Click" />
那么不管test()執(zhí)行的結(jié)果如何.服務(wù)器端對應(yīng)的Button1_Click方法都永遠(yuǎn)不會(huì)執(zhí)行.因?yàn)閞eturn false使得始終使客戶端返回false 如果我們寫成: <asp:Button ID="Button1" runat="server" Text="提交" OnClientClick="test()" onclick="Button1_Click" />
那么Button1_Click都有會(huì)發(fā)生.同樣也就達(dá)不到效果.也就是說你沒有通過檢測也去執(zhí)行服務(wù)器的方法了. 我們還可以通過Button1.Attributes.Add("onclick", "test()");的方法來觸發(fā)客戶端事件 |
|