jQuery - 捕获并覆盖带有 target=_blank 的链接

3
我们有一些遗留页面,其中有链接,其中包含target="_blank"。当点击这些链接时,我想忽略它并运行我为打开窗口编写的JavaScript代码。
如果可能的话,使用jQuery,那么我应该研究哪些方法或术语?
提前感谢您。
4个回答

8

只需使用事件委托来防止目标为"_blank"的链接起作用,例如:

$(document).on('click', 'a[target="_blank"]', function(event) {
    event.preventDefault();
    alert('Prevented');
});

谢谢。看起来我需要升级jQuery。我们正在运行1.2.6,on方法是在1.7版本中添加的 :) http://api.jquery.com/on/ - Dr.Avalanche
1
如果您无法升级,也许可以使用旧的.live函数。 - Roger C
谢谢Roger,我们计划在不久的将来进行升级,但我目前正在尝试解决的问题优先级更高。升级需要运行大型测试套件以确保一切仍然正常。您的解决方案非常适合那些没有被困在黑暗时代的人。再次感谢。 - Dr.Avalanche

4

1
不客气。你应该升级到1.9.0版本,只需要复制粘贴一下就可以了 :D - XCS
我们需要对应用程序的任何代码更改进行大量测试,虽然替换一个文件很简单,但重新测试所需的时间相当长。我们计划在接下来的几个月内进行升级,以加入现代化的行列。再次感谢您的帮助 :) - Dr.Avalanche

3
尝试这个。
   $('a[target=_blank]').click(function(event) {
        event.preventDefault();            
        // Now make a call to your own function
    });

0

我只是想指出@Roger C的监听器是更好的解决方案...如果您的页面上有任何动态加载的内容(即AJAX或AngularJS单页应用程序)。

此监听器侦听文档的点击事件,并将捕获新添加的内容,而无需在内容更改后重新添加监听器:

$(document).on('click', 'a[target="_blank"]', function(event) {
    event.preventDefault();
    alert('Prevented');
});

此监听器会监听在其被调用时找到的所有选择器(可能会缺少任何新添加的内容):

$('a[target=_blank]').click(function(e){
    e.preventDefault();
    alert('Prevented');
});

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