110,534
社区成员
发帖
与我相关
我的任务
分享
var countdown = 60;
function settimes(obj) {
if (countdown == 0) {
obj.removeAttribute("disabled");
obj.value = "点击获取验证码";
countdown = 60;
return;
} else {
obj.setAttribute("disabled", true);
obj.value = "重新发送(" + countdown + ")";
countdown--;
}
setTimeout(function () {
settime(obj)
}, 1000)
}
protected void SendCheckNo_ServerClick(object sender, EventArgs e)
{
getNewCheckNO();
onclientclick="settimes(this); return true"
"if(confirm(....) return;"
那么就可能造成服务器端代码不能执行,因为客户端代码有 return,造成拼接在一起的回发服务器刷新代码无法被调用。// System.Web.UI.Util
internal static void WriteOnClickAttribute(HtmlTextWriter writer, HtmlControl control, bool submitsAutomatically, bool submitsProgramatically, bool causesValidation, string validationGroup)
{
AttributeCollection attributes = control.Attributes;
string text = null;
if (submitsAutomatically)
{
if (causesValidation)
{
text = Util.GetClientValidateEvent(validationGroup);
}
control.Page.ClientScript.RegisterForEventValidation(control.UniqueID);
}
else if (submitsProgramatically)
{
if (causesValidation)
{
text = Util.GetClientValidatedPostback(control, validationGroup);
}
else
{
text = control.Page.ClientScript.GetPostBackEventReference(control, string.Empty, true);
}
}
else
{
control.Page.ClientScript.RegisterForEventValidation(control.UniqueID);
}
if (text != null)
{
string text2 = attributes["onclick"];
if (text2 != null)
{
attributes.Remove("onclick");
writer.WriteAttribute("onclick", text2 + " " + text);
return;
}
writer.WriteAttribute("onclick", text);
}
}
当校验(Valid)通过之后,它会自动把 control.Page.ClientScript.GetPostBackEventReference 函数输出的回调指令拼接到你写的 onclick 内容的后边。所以按道理来说,本来就是连续执行前后端的代码的。除非是你的前端 onclick 中的描述内容有 return 语句而阻止了 GetPostBackEventReference 产生的代码被调用。<input type="button" class="c2" runat="server" 喳喳呼呼="pis(sdf>9234)" .......
那么这个自定义的属性也会原封不动地输出到 html 中的。所以你写 onclick 也是如此。