" />

jQuery - target.href 与

发布于 2024-12-21 13:58:30 字数 760 浏览 0 评论 0 原文

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

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

此实例中的 var url 在控制台中返回未定义,但在任何其他链接上它返回 href

我猜我在这种情况下使用目标方法有问题?

$('#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>

I have an a ajax method that hijacks every link in the HTML and preventDefault and then loads the loadPage function().

The method works on all other links that does not have a <img> inside. But when a <a> has a <img> inside the method clickEvent.target.href does not seem to work.

The var url in this instance returns undefined in the console, but on any other links it returns the href.

I'm guessing there is something wrong with I use the target method in this instance?

$('#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>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

白昼 2024-12-28 13:58:30

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

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

解决方案是将该行更改为

var url = this.href;

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

var url = $(this).attr('href');

第一个更快。

解决方案是处理程序中的 this 引用您附加处理程序的 DOM 元素。所以this将引用a

Yes, you shouldn't use the clickEvent.target because is the target that was clicked. In your case the target isn't the a but is the img it contains.

Events in fact bubble up, so you click the image and the click event propagates to the top (up to the a) and triggers the event delegate you provided.

The solution is to change that line to

var url = this.href;

Or if you prefer to get the value through jQuery use

var url = $(this).attr('href');

The first one is faster.

The solution is that this in the handler refers to the DOM element you attach the handler to. So this will refer to the a.

情绪少女 2024-12-28 13:58:30

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

$('#container a').click(function(event){
     var url = $(this).attr('href');
     if(url.match(urlWebServer)) {
                 event.preventDefault();
                 loadPage(url);
     }
});

If you use jQuery to select and bind, why not use jQuery for the rest of your action?

$('#container a').click(function(event){
     var url = $(this).attr('href');
     if(url.match(urlWebServer)) {
                 event.preventDefault();
                 loadPage(url);
     }
});
心清如水 2024-12-28 13:58:30

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

var url = this.href;

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

That's because clickEvent.target refers to the element which received the click, not the element to which the event listener was attached. Use this instead, which corresponds to the correct element.

var url = this.href;

Also note that you don't need to do $(this).prop or $(this).attr; you can safely access the .href property of an anchor element without needing to create another jQuery instance and call another method.

清晰传感 2024-12-28 13:58:30

target 是触发事件的实际元素,它可以是您附加到的元素的任何子元素。

使用 this 来引用链接。

var url = $(this).prop("href");

The target is the actual element that event was triggered on, which can be any of the children of the element you attached it to.

Use this to reference the link instead.

var url = $(this).prop("href");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文