jQuery / Javascript:如何获取匿名函数引用变量声明外?

时间:2012-02-11 22:44:23

标签: javascript jquery

我有一些jQuery代码没有按预期工作。

$('a[href^="http://"]').not('[href^="http://mydomain.com"], [href^="http://itunes.apple.com"]').click(function (e) {
    e.preventDefault();
    console.log("external: " + this.getAttribute('href'));
    var url = this.getAttribute('href');
    foo.track(
        "External", 
        { 'URL': url }, 
        function (url) { 
            location.href = url 
        }
    );
});

对于此示例,我正在跟踪我的域中的所有外部点击,但iTunes应用商店除外。假设foo.track()是我用于跟踪某些事件以进行报告的第三方方法。它的最后一个参数是一个匿名函数,一旦跟踪调用成功返回就会执行。

上面的代码由于某种原因试图将所有内容导航到http://mydomain.com/1。但是,console.log语句成功记录了预期值。好像url变量没有引用我期望的值。我也尝试用location.href = url替换window.location = url,但我得到的结果相同。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

只需从导航功能中删除参数即可。像这样:

$('a[href^="http://"]').not('[href^="http://mydomain.com"], 
                             [href^="http://itunes.apple.com"]').click(function (e) {
e.preventDefault();
console.log("external: " + this.getAttribute('href'));
var url = this.getAttribute('href');
foo.track("External", { 'URL': url }, function (/*url*/) { location.href = url });
});