首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 ><a href="#"><img></a>的jQuery - target.href

<a href="#"><img></a>的jQuery - target.href
EN

Stack Overflow用户
提问于 2011-12-16 21:57:03
回答 4查看 10.9K关注 0票数 1

我有一个ajax方法,它劫持HTML和preventDefault中的每个链接,然后加载loadPage函数()。

该方法适用于内部没有<img>的所有其他链接。但是,当<a>的方法中包含<img>时,clickEvent.target.href似乎不起作用。

此实例中的var url在控制台中返回undefined,但在任何其他链接上都返回href

我猜我在这个例子中使用target方法有问题吧?

代码语言:javascript
复制
$('#container a').click(function(clickEvent){
         var url = clickEvent.target.href;
         if(url.match(urlWebServer)) {
                     clickEvent.preventDefault();
                     loadPage(url);
         }
});



<div id="user_img">        
    <a href="somepage.html"><img src="img_user/self.jpg" class="self" /></a>
</div>
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-12-16 22:11:01

是的,您不应该使用clickEvent.target,因为它是被单击的目标。在您的示例中,目标a不是img ,而是它包含的。

事件实际上是冒泡的,所以您单击图像,click事件传播到顶部(直到a),并触发您提供的事件委托。

解决方案是将该行更改为

代码语言:javascript
复制
var url = this.href;

或者,如果您更喜欢通过jQuery获取值,请使用

代码语言:javascript
复制
var url = $(this).attr('href');

第一个更快。

解决方案是处理程序中的this引用将处理程序附加到的DOM元素。因此,this将引用a

票数 9
EN

Stack Overflow用户

发布于 2011-12-16 22:02:16

如果您使用jQuery来选择和绑定,为什么不使用jQuery来完成剩下的操作呢?

代码语言:javascript
复制
$('#container a').click(function(event){
     var url = $(this).attr('href');
     if(url.match(urlWebServer)) {
                 event.preventDefault();
                 loadPage(url);
     }
});
票数 4
EN

Stack Overflow用户

发布于 2011-12-16 22:02:19

这是因为clickEvent.target引用的是接收到单击的元素,而不是事件侦听器附加到的元素。请改用this,它与正确的元素相对应。

var url = this.href;

还要注意,您不需要执行$(this).prop$(this).attr;您可以安全地访问锚元素的.href属性,而无需创建另一个jQuery实例并调用另一个方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8535218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档