无法使用JQuery获取asp.net元素Text属性

时间:2015-01-26 15:17:15

标签: javascript c# jquery asp.net

我有一个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)指的是全局窗口,而不是触发事件的对象,所以我很清楚我需要帮助找出如何纠正这个问题。

2 个答案:

答案 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());
});