我正在尝试使用动态生成的ID查找ajax.net扩展程序元素。我正在尝试连接一个事件处理程序,以便在按下'escape'时关闭所有ajax.net模式弹出窗口。我很困惑为什么其中一个有效,一个没有。
$find('ctl00_MainContent_ucUserControl1_mpePopup'); //returns the element
$find('[id="ctl00_MainContent_ucUserControl1_mpePopup"]'); //returns null
最终目标是能够在不将ID硬连接到选择器的情况下找到元素:
$find('[id$="_mpePopup"]'); //return all elements that end with "_mpePopup"
答案 0 :(得分:1)
我现在看到$ find和.find()之间存在差异。我没有意识到这一点,但是一旦提到$ find()是一个MS Ajax快捷方式,我就更深入地发现了一个将jQuery与MS Ajax连接起来的解决方案。
var popups = $.grep(Sys.Application.getComponents(),
function (elem, index) {
return $(elem).attr('_name') == 'ModalPopupBehavior';
}
);
$(popups).each(function () { this.hide(); });
问题是$ find(id)只返回Sys.Application._components [id]的元素。在这种情况下,'id'是一个索引,因此您不能使用部分字符串或模式。
将该集合转换为数组之后,可以使用jQuery.grep()返回满足某些条件的元素数组(在这种情况下,我注意到'_name'比使用它更容易使用属性选择器)并使用jQuery.each()迭代它们。
答案 1 :(得分:0)
我相信您会发现$find
操作需要一个ID。除非我严重错误,否则它没有模式匹配能力。 (有关$find
和$get
的其他信息,请参阅http://mattberseth.com/blog/2007/08/the_everuseful_get_and_find_as.html)
您可以考虑使用已知的弹出客户端ID填充JavaScript变量,使用无用的<%= mpePopup.ClientID %>
页面文字绑定语法或一些方便您的情况的其他方法。下面是ASPX标记的一个简单示例,其中mpePopup
是页面类的成员:
<script type="text/javascript">
function closePopup() {
var mpePopupID = '<%= mpePopup.ClientID %>';
var mpePopupBehavior = $find(mpePopupID);
// ...
}
</script>