【问题标题】:Anchor plus href and onclick event (tracking)Anchor plus href 和 onclick 事件(跟踪)
【发布时间】:2013-04-24 17:04:28
【问题描述】:

我得到了以下锚点来访问目标站点并跟踪用户的统计信息:

<a href="http://target.tld" target="_blank" onclick="$('<img></img>').attr({src: 'stats.php?my_param=value'}); return true;">Foo</a>

<a href="http://target.tld" target="_self" onclick="$('<img></img>').attr({src: 'stats.php?my_param=value'}); return true;">Foo</a>

第一个为 img (_blank) 生成 200 Ok 的状态,但第二个 (_self) 的状态为 (canceled)。 p>

谁能告诉我为什么,有没有更好的方法?

谢谢!

【问题讨论】:

  • 首先,您的脚本的具体目标是什么?你想知道用户点击了哪里?
  • 是的,只是为了跟踪用户

标签: jquery url onclick statistics href


【解决方案1】:

首先,避免on*事件属性。如果你有 jQuery,用它来绑定你的事件。其次,看起来您正在创建 img 元素,目的是发出 GET 请求来跟踪点击。相反,只需使用 jQuery 来触发请求。

<a href="http://target.tld" target="_blank" class="track-link" data-value="foo">Foo</a>    
<a href="http://target.tld" target="_self" class="track-link" data-value="bar">Foo</a>
$('.track-link').click(function() {
    var trackValue = $(this).data('value');
    $.get('/stats.php', { my_param: trackValue });
});

更新

尝试使用mousedown 事件来确保在页面传输之前发送请求:

$('.track-link').mousedown(function() {
    var $link = $(this);

    if (!$link.data('request-sent')) {
        $.get(
            '/stats.php', 
            { my_param: $link.data('value') },
            function() {
                $link.data('request-sent', true);
            }
        );
    }
});

更新 #3

$('.track-link').click(function(e) {
    e.preventDefault();
    var $link = $(this);
    $.get(
        '/stats.php', 
        { my_param: $link.data('value') },
        function() {
            window.location.assign($link.prop('href'));
        }
    );
});

【讨论】:

  • 谢谢伙计。你是否也能告诉我,如果我使用 _self 作为目标并且如果在新窗口中打开 href url,那么为什么会取消请求,该窗口会被加载且没有错误
  • 我认为它会起作用,但它不会。与 onclick img 的结果相同 :(
  • 嗯,有时它可以工作,有时不能,我猜它是一个运行时问题。我可以用 window.location 解决问题,但是一些弹出窗口阻止程序使 window.location 出现问题
  • 我想问题是因为在请求完成之前链接了链接。试试我的最新更新。
  • 谢谢,但是“window.location”是否会对弹出窗口阻止程序等产生任何问题?
猜你喜欢
  • 2013-07-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-25
  • 2014-04-22
  • 2017-03-04
  • 2012-05-02
  • 2015-01-17
  • 2012-09-20
相关资源
最近更新 更多