使用ASP.Net AJAX回发的JQuery绑定点击功能变得无法绑定

时间:2010-08-14 23:55:10

标签: jquery asp.net-ajax

问候所有人,

我有一个简单的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

2 个答案:

答案 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");
    });
});