OnClick事件不会在触发JQuery事件后被触发
Codebehind OnClick event is not fired after firing JQuery event
我在我的表单上使用html5约束验证的几个字段,如:
<asp:TextBox ID="TextBox1" runat="server" Required="required" ToolTip="Description is required."></asp:TextBox>
<asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="btnSubmit_Click" />
和我想禁用提交按钮通过CSS和JQuery点击,但只有在验证通过后。我尝试像这样挂钩到表单提交事件:
<script type='text/javascript'>
var $form = $('#form1');
var $submitButton = $('#<% = btnSubmit.ClientID %>');
$form.submit(function () {
$submitButton.prop('disabled', true);
})
</script>
验证后成功禁用按钮,调用回发,但没有触发btnSubmit_click
事件。
我如何确定通过javascript/jquery时,html5约束验证已经通过,所以我可以执行一个jquery函数,禁用按钮,但仍然允许我的btnSubmit_click
事件火灾?
更新:我使用纯JQuery 2.0.3
在某些情况下同时触发Codebehind事件和JQuery事件是一个常见的问题。你可以用一些技巧来克服这个问题,但我用这个作为一个肮脏的解决方案,也许还有一些更干净的方法。
你可以让JQuery表单。提交事件通常在第一次触发,但当你点击提交按钮,添加一个"DontFireJQuery"类按钮和设置按钮为禁用后,它会自动再次触发使用:
__doPostBack("<%= btnSubmit.UniqueID %>", "");
在下一次触发时,按钮有"DontFireJQuery"类,JQuery跳过它,因此触发Codebehind OnClick事件。
<asp:TextBox ID="TextBox1" runat="server" Required="required" ToolTip="Description is required."></asp:TextBox>
<br />
<asp:Button ID="btnSubmit" runat="server" Text="Submit" />
<br />
<asp:Label ID="lblMsg" runat="server" Text=""></asp:Label>
<script type='text/javascript'>
Sys.Application.add_load(initJScripts);
function initJScripts() {
var $form = $('#form1');
var $submitButton = $('#<% = btnSubmit.ClientID %>');
if (!$submitButton.hasClass("DontFireJQuery")) {
$form.submit(function () {
$submitButton.addClass("DontFireJQuery");
$submitButton.prop('disabled', true);
__doPostBack("<%= btnSubmit.UniqueID %>", "");
})
}
}
</script>
In CodeBehind:
Private Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click
System.Threading.Thread.Sleep(1000)
lblMsg.Text = "OK"
End Sub
(如果需要,可以使用这个在线工具将VB转换为c#: http://codeconverter.sharpdevelop.net/SnippetConverter.aspx)
这条线:
System.Threading.Thread.Sleep(1000)
用于测试,为了显示按钮立即被设置为禁用,1秒后,lblMsg中将显示"OK"消息。如您所知,在每次回发之后,由JQuery应用的更改将消失,并且在显示OK消息时再次将按钮设置为启用。如果您想将按钮设置为永久禁用,您可以像这样更改后面的代码:
Private Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click
System.Threading.Thread.Sleep(1000)
btnSubmit.Enabled = False
lblMsg.Text = "OK"
End Sub
这段代码的编写方式也可以在UpdatePanel中使用,没有任何问题
- 选择onclick事件jquery
- 用于多个类事件Jquery的单个函数
- 激发滑块's幻灯片事件jquery ui
- 设置重复按钮以注册点击事件jquery
- 保留当前点击事件jquery
- 启动/停止按键事件jquery
- 在事件jquery中插入一个函数
- 删除克隆的事件JQuery
- typeahead选择事件(jQuery)的动态绑定
- 触发自定义事件 Jquery
- 绑定两次或更多次的事件 jquery
- 单击时的事件 jquery 不起作用
- 在鼠标悬停事件 jquery 上显示边框的内容
- 同时触发两个鼠标事件 jQuery
- 焦点事件 jquery 组合框/自动完成
- 如何在页面中捕获“正文”和“正文”事件[Jquery].
- 将对象传递给事件 jQuery
- 验证“取消”上的字段 单击Onbeforeunload事件JQUERY
- 复选框单击事件 jQuery 不起作用
- 口述事件jquery顺序