JQuery - $(this).attr('name')

10

我给一个超链接分配了name属性。
当我使用 jQuery 进行以下操作时,link_name 没有返回任何内容。
我做错了什么吗?

$("body").delegate("a", "click", function (event) {

    var link_name = $(this).attr('name');
    alert(link_name);

1
在这种情况下,检查你实际得到的内容是很有用的:在处理程序中放置 console.log(this)(与 alert 相同的想法,但更加友好)。确保你使用的浏览器可以轻松访问开发者控制台。 - Amadan
3
你没有披露所有情况,因为你的代码在这里运行得很好:http://jsfiddle.net/jfriend00/fqM2V/。你是否在等待文档加载完成后再运行此代码? - jfriend00
1
你在上面的代码中漏掉了结尾的 }); 吗?这个 jsFiddle 链接里的代码是我写的:http://jsfiddle.net/jfriend00/fqM2V/。你的错误控制台有显示任何错误吗? - jfriend00
1
拜托,Nate。你发了一个问题,却回答了一堆问题,却不在旁边澄清?这对任何人都不是有效的使用SO的方式。当你问问题时,应该在接下来的30-60分钟内多次检查,看看提问是否清晰或是否存在问题。你不是SO的新手,所以你应该知道这一点。 - jfriend00
对于关闭的评论:这个问题不够清晰,无法回答,但是它已经一年没有得到解释性的评论或编辑。无论这个问题是什么,很可能已经丢失或被遗忘了。 - dlamblin
显示剩余2条评论
2个回答

23

我会使用这个(使用最新的jQuery):

$("body").on("click", "a", function (event) {
    var link_name = $(this).attr('name');
    alert(link_name);
});

2
-1 踩因为它没有解释为什么楼主的代码不起作用。 - jfriend00
4
有这么多的代码(包括缺少结尾括号等),错误根本不清楚。如果将这段代码替换原来的代码,他应该能够看到明显的错误。这将使他在这部分代码上有信心,并希望能够帮助他找到真正的错误。 - Rich Bradshaw

2

引用OP:

我做错了什么吗?

正如其他人所指出的,如果您添加缺失的闭合括号});,您的代码应该可以正常工作。

您还没有说明使用的是哪个版本的jQuery,然而,如果使用最新版本的1.7,则应该使用on()1代替delegate(),并且使用prop()代替attr()

$("body").on("click", "a", function (event) {
    var link_name = $(this).prop('name');
    alert(link_name);
});

自 jQuery 1.7 版本起,.delegate() 方法已被 .on() 方法取代。

1
这有点不相关,因为提供的代码实际上是有效的。 - gotofritz
1
对于未回答问题的答案进行踩,原帖询问.delegate()方法。 - jfriend00
@jfriend00,OP在哪里询问了delegate?请看标题:“JQuery - $(this).attr('name')",而且OP说,“我的JQuery link_name没有返回任何东西。” - Sparky
他们在询问为什么他们的代码(使用.delegate())无法正常工作。这就是问题所在。放弃使用.delegate()与他们特定的问题无关,因为.delegate()完全可以正常工作。 - jfriend00
2
OP没有提到使用jQuery 1.7+,所以你没有理由“知道”.delegate()不再推荐使用,即使它不被推荐,它仍然在1.7+中起作用,并且将在很长一段时间内继续使用,因此这与他们的代码为什么无法工作无关(如我在评论中发布的jsFiddle所示)。事实上,在jQuery 1.7之前的版本中,.delegate()特别推荐使用而不是.live()。事实是-改为.on().prop()与解决他们的问题无关。 - jfriend00
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接