jquery选择器不适用于使用asp:UpdatePanel加载的控件

时间:2011-05-09 12:18:12

标签: jquery asp.net updatepanel

我有一个使用asp.net updatepanel加载一些分页项的遗留代码。基本上它会有一些文本框和一些文本。我需要检查是否在单击按钮时选中了任何复选框。我已经为初始加载工作的jquery代码,但是当ajax加载发生时,加载的项不再在初始DOM中,因此不会考虑任何jquery活动。我们可以使用live或deligate for events,但是如果我必须使用控件作为选择器,那将无济于事。

检查复选框是否被选中的代码是向前的,但我关心的是如何在ajax调用后重新绑定它?

if ($('input:checked').length > 0) {
       alert('checked');
   }
   else {
          alert("not selected");
   }

任何想法??

3 个答案:

答案 0 :(得分:1)

如果您更改了初始bind(或click或其他内容,click只是bind的包装器),请更改为live或(更好) delegate,他们将在更新底层DOM元素后继续存在。

可悲的是,api.jquery.com网站今天遇到了问题,因此这些链接现在不会非常有用。但基本上,如果你有:

$("some_selector").click(function() { ... });

您可以将其更改为

$("some_selector").live("click", function() { ... });

或(更好)

$("some_parent_element_selector").delegate("selector_for_descendants", "click", function() { ... });

jQuery监视父元素上的事件(或live的情况下的“body”),然后检查 originating 元素是否与你给的选择器。如果是这样,它会调用您的处理程序,就好像它已经挂钩在实际元素上一样。由于处理程序位于祖先元素上,而不是实际的后代元素,因此您可以随意交换它们。这有时被称为“事件委托”(因此函数delegate)。

示例:

HTML:

<div id='container'>
  This is the container.
  <div class='foo'>
    This is the descendant of the container. Click me.
  </div>
</div>

JavaScript的:

$("#container").delegate(".foo", "click", function() {
  $("<p>Element with class 'foo' clicked!</p>").appendTo(document.body);
});

Live copy

答案 1 :(得分:0)

答案 2 :(得分:0)