1

我正在尝试查找具有动态生成 ID 的 ajax.net 扩展器元素。我正在尝试连接一个事件处理程序以在按下“转义”时关闭所有 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"
4

2 回答 2

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() 遍历它们。

于 2011-03-02T16:26:35.047 回答
0

相信您会发现该$find操作需要一个 ID。除非我大错特错,否则其中没有模式匹配功能。(有关 and 的更多信息$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>
于 2011-03-01T03:30:47.797 回答