问候所有人,
我有一个简单的JQuery函数绑定到ASP:按钮并在单击提交按钮时触发,如下所示:
<asp:Button ID="btnSubmit" CssClass="btnSubmit" OnClick="btnSubmit_Click" runat="server"
Text="Send" />
$(document).ready(function () {
$(".btnSubmit").click(function () {
alert("button clicked");
});
});
此代码在第一次加载页面时正确运行,但在单击“提交”(并发生回发/回发)后再也不会运行。 asp按钮代码位于UpdatePanel中。似乎JQuery代码在回发后被“未注册”或未绑定。我在页面上有一个ScriptManager控件,但这就是我正在做的事情:
<asp:ScriptManager ID="ContactFormScriptManager" runat="server">
<Scripts>
<asp:ScriptReference Path="Scripts/jquery-1.4.1.js" ScriptMode="Auto" />
<asp:ScriptReference Path="Scripts/contact-form.js" ScriptMode="Auto" />
</Scripts>
</asp:ScriptManager>
我怀疑我需要更多地使用ScriptManager来确保我的JQuery代码保持注册状态,但我不确定是什么。您的建议将不胜感激。
谢谢, -NorthK
答案 0 :(得分:1)
@ Sarfraz对于解决方案是正确的,但我认为您可能需要一些解释为何其有效:
$(function () {
$(".btnSubmit").live("click", function() {
alert("button clicked");
});
});
并不是说它是“未注册的”,而是UpdatePanel中的元素被新元素完全破坏/替换。由于点击处理程序存储在这些元素上(好吧,不完全,但是很接近),因此不会自动为新元素创建它。
然而 .live()
的工作方式不同,它为document
添加了一个事件处理程序,它不会被替换。它会监听click
事件到bubble up the DOM并到达文档。当它到达那里时,它检查事件来自的元素是否与选择器匹配......如果选择器匹配,它将执行处理程序。
答案 1 :(得分:0)
试试这个:
$(document).ready(function () {
$(".btnSubmit").live('click', function () {
alert("button clicked");
});
});