选择ajax.net元素时,jQuery .find(selector)会出现问题

时间:2011-03-01 03:09:58

标签: jquery asp.net ajax.net

我正在尝试使用动态生成的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"

2 个答案:

答案 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>