我有一个asp.net转发器正在创建一个无序的超链接对象列表。我正在尝试使用Jquery来捕获给定超链接的“Text”值,以便以后用于恶意目的。
这是转发器创建我的列表o'链接:
<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;
}
运行时我得到的是一个警告框,上面写着“点击”。没有返回调用该函数的对象的文本(是的,我的所有链接都有文本。)
我已经尝试过每个Jquery文档的event.target,我已经尝试过event.srcElement(即使我正在使用Chrome),我已经尝试将$(this).text()移动到一个单独的变量该函数然后在我的警报中引用该变量。我试过Jquery 1.8.2和1.11.2。什么都没有。
我从开发工具中看到$(this)指的是全局窗口,而不是触发事件的对象,所以我很清楚我需要帮助找出如何纠正这个问题。
答案 0 :(得分:1)
this
未在内联onclick
处理程序的函数调用中保留。你需要传递它:
使用此:
onclick="return aClick(this);"
和
function aClick(link) {
console.log("Click " + $(link).text());
return false;
}
使用jQuery时,我强烈建议您不要使用内联处理程序,因为它们将处理程序注册代码与处理程序分开是没有充分理由的。使用jQuery事件处理程序代替以便于维护:
e.g。
$(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次:)
答案 1 :(得分:0)
试试这个:
$('[id$=_items]').find('[id*= HyperLink1]').click(function(event){
alert($(this).text());
});