我有一个asp.net中继器正在创建超链接对象的无序列表。我试图使用Jquery捕获给定超链接的“文本”值,以作恶用,以便以后使用。
这是创建我的链接列表的转发器:
<ul class="links">
<asp:Repeater Runat="server" ID="_items" EnableViewState="false">
<ItemTemplate>
<li>
<asp:HyperLink ID="HyperLink1" runat="server" Text='[Eval]' NavigateUrl="#" onclick="return aClick();" />
</li><br />
</ItemTemplate>
</asp:Repeater>
</ul>
...以及该aClick()函数的Javascript:
function aClick() {
alert("Click " + $(this).text());
return false;
}
运行时,我得到的只是一个警告框,上面显示“ Click”。没有从调用该函数的对象中返回任何文本(是的,我的所有链接都包含文本。)
我已经尝试过每个Jquery文档的event.target,我已经尝试过event.srcElement(即使我使用的是Chrome),并且我已经尝试在函数开始时将$(this..text()移到一个单独的变量中然后在我的警报中引用变量。我已经尝试过Jquery 1.8.2和1.11.2。没有。
我从开发工具中看到$(this)指的是全局Window,而不是触发事件的对象,因此很明显,我需要帮助来弄清楚如何更正此问题。
this
不能保留在从内联onclick
处理程序进行的函数调用中。您需要通过:
用这个:
onclick="return aClick(this);"
和
function aClick(link) {
console.log("Click " + $(link).text());
return false;
}
使用jQuery时,我强烈建议您不要使用内联处理程序,因为它们没有充分的理由将处理程序注册代码与处理程序分开。请改用jQuery事件处理程序,以便于维护:
例如
$(function(){
$('.links a').click(function(){
console.log("Click " + $(this).text());
return false;
}
});
笔记:
$(function(){...});
只是一个捷径 $(document).ready(function(){...});
alert
在调试click
事件中使用(它会妨碍您)。使用console.log
代替(但请记住将其删除以进行发布,因为未调试的IE会崩溃,因为未定义控制台,除非您运行了调试工具。)如果要支持动态元素,请使用以下方法将其更改为连接到不变祖先的委托事件处理程序on
:
$(function(){
$('.links').on('click', 'a', function(){
console.log("Click " + $(this).text());
return false;
}
});
这支持以后添加的链接,并且开销较低(启动时仅连接一个处理程序),并且事件时间的任何额外延迟都不明显,因为您无法简单地每秒单击50,000次:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句