我有一个使用asp.net updatepanel加载一些分页项的遗留代码。基本上它会有一些文本框和一些文本。我需要检查是否在单击按钮时选中了任何复选框。我已经为初始加载工作的jquery代码,但是当ajax加载发生时,加载的项不再在初始DOM中,因此不会考虑任何jquery活动。我们可以使用live或deligate for events,但是如果我必须使用控件作为选择器,那将无济于事。
检查复选框是否被选中的代码是向前的,但我关心的是如何在ajax调用后重新绑定它?
if ($('input:checked').length > 0) {
alert('checked');
}
else {
alert("not selected");
}
任何想法??
答案 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);
});
答案 1 :(得分:0)
答案 2 :(得分:0)
codeplex有一个解决方案:http://updatepanelplugin.codeplex.com/discussions/70810