今天碰到一個非常神奇的現象,有一個按鈕是這么寫的
<cc7:commonbutton runat="server" id="btnLogin" text="登陸"
onclientclick="ValidateAndConfirm();return false;" validationgroup="vgSearch" onclick="btnLogin_Click" />
js是這么寫的
function ValidateAndConfirm() {
setTimeout(function () {
Page_ClientValidate();
if (!Page_IsValid) {
ShowMsgBox1("錯誤");
return;
}
ShowMsgBox2("確定繼續嗎");
}, 0);
}這個按鈕本身沒任何問題,如果畫面上有什么必須值沒有的話就會進入ShowMsgBox1,如果值都齊全的話就會進入ShowMsgBox2,選OK的話去到服務端的btnLogin_Click方法。
然后問題來了,他的下面存在另一個按鈕
<cc7:commonbutton runat="server" id="btnClearDetail" text="清空" onclick="btnClearDetail_Click" />
一旦登陸按鈕發生錯誤進入到ShowMsgBox1("錯誤");,清空按鈕按第一次沒有反應,按第二次才會執行onclick。
實驗1:在清空按鈕里面追加了onclientclick事件是執行的,于是在清空按鈕里面加上onclientclick="return true;"但onclick不會執行
實驗2:將onclientclick="ValidateAndConfirm();return false;"的return false;刪了,進入到ShowMsgBox1之后,清空按第一次也會執行了,但是進入到ShowMsgBox2的時候,畫面詢問的小視窗一閃而過,直接執行登陸按鈕的onclick。
實驗3:將Page_ClientValidate();洗掉,清空按第一次會執行,但Page_IsValid初始為true導致直接進入ShowMsgBox2而不是ShowMsgBox1
實驗4:將ValidateAndConfirm方法寫進后臺CS里面btnLogin.Attributes.Add("onclick", "javascript:ValidateAndConfirm(); return false;");,結果和一開始沒任何區別。
請問有沒有大神知道其中緣由,或者也碰到過一樣的情況。
uj5u.com熱心網友回復:
function ValidateAndConfirm() {
setTimeout(function () {
Page_ClientValidate();
if (!Page_IsValid) {
ShowMsgBox1("錯誤");
return false;
}
ShowMsgBox2("確定繼續嗎");
return true;
}, 0);
}
然后 onclientclick="ValidateAndConfirm()" 試試
uj5u.com熱心網友回復:
是否為:類似“有罪推定”的邏輯設定?可能是對敵意訪問的一種防護。轉載請註明出處,本文鏈接:https://www.uj5u.com/net/246365.html
標籤:ASP.NET
