如果我有这样的锚标记:
<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:”?在选择器有机会找到它之前,它会得到解决吗?
感谢。
答案 0 :(得分:1)
因为它适用于:contains("Cancel")
,因此在页面加载后,Telerik 动态添加了JavaScript,最有可能导致它无法触发。
在这种情况下,使用委托事件处理程序,附加到不变的祖先将修复它。
e.g。
$(document).on('click', 'a[href^="javascript:"]', function () { selected = true; });
它的工作原理是通过监听事件(点击)冒泡到一个不变的祖先(document
是默认的,没有别的更接近/方便)。它然后将选择器应用于气泡链中的元素。 然后针对导致事件的任何匹配元素运行该函数。这只需要选择器存在于事件时间,而不是在事件被注册时。
委托事件具有更快的连接时间(因为它们只将处理程序连接到一个元素)并且在事件时添加的任何微小延迟都将被忽略,因为您无法快速单击鼠标以显示:)
注意:不要将'body'
用于委派事件,因为它有一个与样式相关的错误,可能导致鼠标事件无法冒泡到body
(如果计算出的身高是0)。 / p>