Javascript 如何防止ASP:Button从jQuery单击处理程序发回
我在页面上有一个Javascript 如何防止ASP:Button从jQuery单击处理程序发回,javascript,jquery,asp.net,Javascript,Jquery,Asp.net,我在页面上有一个ASP:Button。它呈现为HTML,如下所示: <input type="submit" name="myButton" value="Do something" onclick="javascript:WebForm_DoPostBackWithOptions( new WebForm_PostBackOptions('myButton', '', true, '', '', false, false))" id="myButton"
ASP:Button
。它呈现为HTML,如下所示:
<input type="submit" name="myButton" value="Do something"
onclick="javascript:WebForm_DoPostBackWithOptions(
new WebForm_PostBackOptions('myButton', '', true, '', '', false, false))"
id="myButton" />
这里的问题是,ASP粘贴在输入上的内联单击处理程序似乎每次都在jQuery事件处理程序之前执行
这里最简单的解决方案是使用普通的input type=“button”
而不是ASP:button
,不幸的是这是不可能的,因为这个ASP:button
可以执行此场景中需要的许多其他操作
防止表单提交的最佳方法是什么?我曾考虑过使用字符串操作在元素的
onclick
属性上预先添加我的处理程序,但这看起来非常糟糕。我还希望避免使用OnClientClick
,因为这需要公开我的处理函数。有更好的方法吗?您是否尝试过将OnClientClick=“return false;”
属性添加到您的aspx按钮控件中
不用担心,看看这篇文章,它提供了一个javascript事件卸载程序脚本:
我认为您对最后一个方法DomLib.prototype.removeeventsbytypex感兴趣,我认为在javascript事件上调用“preventDefault”就是您想要的。这将阻止发回服务器
$('#myButton').click(function (event) {
//Call prevent default on the event to prevent submitting the form
event.preventDefault();
// do some client-side stuff
if (someCondition) {
// don't postback!
return false;
}
});
我刚找到一个办法
<script type="text/javascript" src="Scripts/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
$(function () {
var ploopButton = null;
$("#ploop").click(function (e) {
ploopButton = this;
});
$("#form1").submit(function (e) {
if (ploopButton !== null) {
ploopButton = null;
return confirm('are u sure?');
}
return true;
});
});
</script>
<form id="form1" runat="server">
<asp:Button ID="ploop" Text="ploop" runat="server" OnClick="ploop_Click" />
</form>
$(函数(){
var ploopButton=null;
$(“#ploop”)。单击(函数(e){
ploopButton=这个;
});
$(“#表格1”)。提交(功能(e){
如果(ploopButton!==null){
ploopButton=null;
返回确认(“您确定吗?”);
}
返回true;
});
});
基本上,您将使用一个全局标志来指示单击了哪个按钮,并且您将在该标志打开时确认表单提交我希望避免将我的处理程序函数公开,因此这将是最后的选择;我已更新我的问题以包含此项。此项无效。内联处理程序在jQuery处理程序触发之前提交表单。另外,
returnfalse
相当于e.preventDefault();e、 停止传播()代码>.Gotcha,我在看你的onclick处理程序,它看起来像是在试图发布表单。因此,不管您有什么类型的按钮,onclick处理程序都会发布表单。我想,在绑定事件处理程序时,它们会按照绑定顺序被调用,因此它会先调用内联处理程序,然后再调用您的处理程序。我所能想到的就是解除默认值的绑定,绑定你的,然后重新绑定原始值在我的回答中添加了另一个想法我没有想到这一点。我来试试,看看它看起来怎么样。
<script type="text/javascript" src="Scripts/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
$(function () {
var ploopButton = null;
$("#ploop").click(function (e) {
ploopButton = this;
});
$("#form1").submit(function (e) {
if (ploopButton !== null) {
ploopButton = null;
return confirm('are u sure?');
}
return true;
});
});
</script>
<form id="form1" runat="server">
<asp:Button ID="ploop" Text="ploop" runat="server" OnClick="ploop_Click" />
</form>