一個頁面,有一個文字框和一個提交按鈕,同時有一個驗證控制項來驗證文字框中的輸入,單擊BUTTON時同時要觸發一個javascript指令碼。
在PageLoad中加入:Button1.Attribute.Add("onclick","return CheckOther()");
運行時提示發生指令碼錯誤,缺少";"
產生的HTML:<input type="submit" name="btCheck" value=" 注 冊 " onclick="return CheckAgree()if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(); " language="javascript" id="btCheck" />
可以發現:CheckAgree()後的確是缺少了";"
改為:Button1.Attribute.Add("onclick","return CheckOther();");
運行時不提示指令碼錯誤,但驗證控制項不起作用了。
產生的HTML:<input type="submit" name="btCheck" value=" 注 冊 " onclick="return CheckAgree();if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(); " language="javascript" id="btCheck" />
可以發現:onclick時調用完CheckAgree()函數直接就返回了,根本就沒有調用驗證指令碼。
改為:Button1.Attribute.Add("onclick","if(Page_ClientValidate()) return CheckAgree();");
運行時不提示指令碼錯誤,並且驗證控制項也起作用了,但是頁面驗證了兩次
產生的HTML:<input type="submit" name="btCheck" value=" 注 冊 " onclick="if(Page_ClientValidate()) return CheckAgree();if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(); " language="javascript" id="btCheck" />
可以發現:在調用Checkgree()函數前先驗證了一次頁面,但如果頁面沒有通過驗證,就會執行下面的if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate();又執行了一次驗證。
改為:Button1.Attribute.Add("onclick","if(Page_ClientValidate()) {eturn CheckAgree();}else{return false;}");
問題解決
產生的HTML:<input type="submit" name="btCheck" value=" 注 冊 " onclick="if(Page_ClientValidate()){return CheckAgree();}else{return false;}if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(); " language="javascript" id="btCheck" />
不過可以看到if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(); 是垃圾代碼,根本就不會執行
把Button1的CausesValidation設定為false,產生的HTML:
<input type="submit" name="btCheck" value=" 注 冊 " id="btCheck" onclick="if(Page_ClientValidate()){return CheckAgree();}else{return false;}" />
可以看到,沒有垃圾代碼了。
但是我想先執行CheckAgree(),如果返回true再驗證頁面,就可以這樣寫:
Button1.Attribute.Add("onclick","return CheckAgree()");
function CheckAgree()
{
if(!document.all["checkbox"].checked)
{
alert("如果繼續註冊,必須先同意協議!");
return false;
}
else
{
if(Page_ClientValidate())
{
return true;
}
else
{
return false;
}
}
}