包含术语“javascript:”的jQuery选择器

时间:2011-12-19 18:49:10

标签: jquery-selectors

如果我有这样的锚标记:

<A id=rgVistaRequestIssues_ctl00_ctl02_ctl03_CancelButton 
href="javascript:__doPostBack('rgGridIssues$ctl00$ctl02$ctl03$CancelButton','')">
Cancel</A>

我想选择这个锚标签,我认为这样可以正常工作:

$('a[href^="javascript:"]').click(function () { selected = true; });

但它根本不起作用。

工作是什么:

$('a[href:contains("Cancel")]').click(function () { selected = true; });

但这对我的口味来说还不够具体。

是否有某些原因选择器无法在运行时找到术语“javascript:”?在选择器有机会找到它之前,它会得到解决吗?

感谢。

1 个答案:

答案 0 :(得分:1)

因为它适用于:contains("Cancel"),因此在页面加载后,Telerik 动态添加了JavaScript,最有可能导致它无法触发。

在这种情况下,使用委托事件处理程序,附加到不变的祖先将修复它。

e.g。

$(document).on('click', 'a[href^="javascript:"]', function () { selected = true; });

它的工作原理是通过监听事件(点击)冒泡到一个不变的祖先(document是默认的,没有别的更接近/方便)。它然后将选择器应用于气泡链中的元素。 然后针对导致事件的任何匹配元素运行该函数。这只需要选择器存在于事件时间,而不是在事件被注册时。

委托事件具有更快的连接时间(因为它们只将处理程序连接到一个元素)并且在事件时添加的任何微小延迟都将被忽略,因为您无法快速单击鼠标以显示:)

注意:不要将'body'用于委派事件,因为它有一个与样式相关的错误,可能导致鼠标事件无法冒泡到body(如果计算出的身高是0)。 / p>