asp.net WebForm中Html服务器控件怎么通过js阻止事件回发,头疼,100分求解
asp.net WebForm中Html服务器控件如何通过js阻止事件回发,头疼,100分求解
想在按钮回发之前通过JS作前端验证,验证通过允许回发,验证失败阻止回发,这是一个很普通的需求,前端代码如下
测试发现,除了第一个web控件btnWeb_S,和最后一个type为submit的服务器控件btnInputSubmit_S可以通过js阻止回发外,中间2个html服务器控件btnInput_S、btnInputButton_S、 没办法通过js return false来
阻止回发,查看源码可以看到,btnInput_S、btnInputButton_S的onclick事件被.net加上了__doPostBack调用
一种解决方案是替换onclick事件代码:
但这存在浏览器兼容性问题
100分求解决方案
------解决思路----------------------
试着在后台添加那个js的验证事件
------解决思路----------------------
或者你放弃ASP控件,所有代码都必须JS验证然后JS提交
这样用户如果禁止了JS脚本,正常功能也无法使用了
想在按钮回发之前通过JS作前端验证,验证通过允许回发,验证失败阻止回发,这是一个很普通的需求,前端代码如下
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ButtonPostbackTest._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript" src="Scripts/jquery-1.7.1.js"></script>
<script type="text/javascript">
//初始化
$(document).ready(function () {
$("#btnWeb_S").click(function () {
return check();
});
$("#btnInput_S").click(function () {
return check();
});
$("#btnInputButton_S").click(function () {
return check();
});
$("#btnInputSubmit_S").click(function () {
return check();
});
});
function check()
{
if ($("#noPostBack").prop("checked") == true) {
alert("阻止回发");
return false;
}
return true;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<input id="noPostBack" name="noPostBack" type="checkbox" /> 阻止回发 <br /><br />
<asp:Button ID="btnWeb_S" runat="server" Text="btnWeb_S" OnClick="btnWeb_S_Click" />
<input id="btnInput_S" name="btnInput_S" type="button" runat="server" value="btnInput_S" onserverclick="btnInput_S_ServerClick"/>
<button id="btnInputButton_S" name="btnInputButton_S" runat="server" onserverclick="btnInputButton_S_ServerClick">btnInputButton_S</button>
<input id="btnInputSubmit_S" name="btnInputSubmit_S" type="submit" runat="server" value="btnInputSubmit_S" onserverclick="btnInputSubmit_S_ServerClick"/>
</div>
<asp:Label ID="lblStatus" runat="server" Text=""></asp:Label>
</form>
</body>
</html>
测试发现,除了第一个web控件btnWeb_S,和最后一个type为submit的服务器控件btnInputSubmit_S可以通过js阻止回发外,中间2个html服务器控件btnInput_S、btnInputButton_S、 没办法通过js return false来
阻止回发,查看源码可以看到,btnInput_S、btnInputButton_S的onclick事件被.net加上了__doPostBack调用
一种解决方案是替换onclick事件代码:
$("#btnInput_S").attr("onclick", "if(!check()) return false;" + $("#btnInput_S").attr("onclick"));
但这存在浏览器兼容性问题
100分求解决方案
------解决思路----------------------
试着在后台添加那个js的验证事件
------解决思路----------------------
或者你放弃ASP控件,所有代码都必须JS验证然后JS提交
这样用户如果禁止了JS脚本,正常功能也无法使用了