2

这是我所拥有的:

  • 在单个 HTML 页面(称为它myapp.req)中运行的 Web 应用程序,内容通过 AJAX 来来往往
  • 应用程序可以通过一个链接从外部进入,例如myapp.req?id=123,应用程序会打开一个标签,其中包含 id 123 处的项目
  • 页面内容多为用户内容,很多时候有应用内链接myapp.req?id=123
  • 问题是单击链接以myapp.req?id=123重新加载浏览器,并删除用户已加载的任何内容或状态

我想要的是能够捕获目标为 的链接点击myapp.req?id=123,而不是重新加载页面,只需打开项目 123 的选项卡,留下当前加载的任何其他内容。但是,如果链接是针对外部网站的,那么显然只需让浏览器离开即可。

所以我的问题真的是:我可以有一个全局链接处理程序来检查我是否要处理链接点击,如果是,运行一些 Javascript 并且不要离开?

我知道我可以找到所有<a>s 并添加侦听器,但我希望该解决方案只需要设置一次侦听器,而不是每次在页面上加载新内容时都添加链接处理程序。由于可以通过多种不同方式加载内容,因此向所有这些地方添加代码会很麻烦。

那有意义吗?

4

3 回答 3

2

jQuery 的 live是你所需要的:

$('a').live("click", function () {
    var myID = $(this).attr('href').match(/id=([a-zA-Z0-9_-]*)\&?/)[1];
    if (myID) {
        //run code here
        alert(myID);
        return false;
    }
});

现在,任何链接都将具有此单击处理程序,无论它是否在调用后添加。

于 2011-08-18T19:19:27.733 回答
1

你当然可以。在正文上添加一个点击处理程序。所以你抓住了所有的点击。然后,您必须检查事件的目标或其父对象之一是否是与您的特定 href 的链接。在这种情况下,停止事件并打开选项卡。

于 2011-08-18T19:39:49.400 回答
0

更新为使用.live而不是.click

如果您使用 jQuery,您可以一次添加一个“实时”单击事件处理程序a href

<body>
    <a href="app.req?id=123&test=432">click here</a>
    <br/>
    <a href="http://whatever.com">whatever</a>
</body>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script type="text/javascript"> 
$('a').live('click',function() {
    var myID = $(this).attr('href').match(/id=([a-zA-Z0-9_-]*)\&?/)[1];
    if (myID) {
        //run code here
        alert(myID);
        return false;
    }
});
</script>

这应该从 href 的查询字符串中提取 id 并让您随心所欲地使用它。

于 2011-08-18T19:05:50.267 回答