0

我正在尝试重定向网页上的链接,在这个简单的示例中,它只是通过简单的检查来设置要设置的 cookie。

不确定这是否是首先处理这种情况的正确方法,并且当“download_link”类有多个链接时我是否会遇到问题,但即使是现在,只有一个这样的链接,目标设置为未定义,看起来重定向器调用中的 $(this) 实际上指向整个 HTML 文档,而不仅仅是我要更改的元素...

    function redirect_link(e, destination) {
        if ($.cookie("contact_set") == "true") {
            window.location.href = destination;
        } else {
            alert("cookie not set");
        }
    }
    function redirector(destination) {
        alert("creating redirector to "+destination);
        return function(e) {redirect_link(e, destination)};
    }
    $(document).ready(function() {
        $('.download_link').click(redirector($(this).attr("href")));
        $('.download_link').attr("href", "#");
    });
4

3 回答 3

2

您正在$(this)从文档的ready回调范围访问,所以$this指向一个HTMLDocument对象!

$(document).ready(function() {
    var $downloadLnk = $('.download_link');
    $downloadLnk.click(redirector($downloadLnk.attr("href")));
    $downloadLnk.attr("href", "#");
});

正如您在评论中要求的那样:

$(document).ready(function() {
  $('.download_link').each(function() {
    var $lnk = $(this);
    $lnk.click(redirector($lnk.attr("href")));
    $lnk.attr("href", "#");
  });
});
于 2012-08-27T09:18:13.373 回答
1
$(function() { // <-- Short for $(document).ready(function() {
    $('.download_link').each(function() {
        var $this = $(this);

        $this.click(redirector($this.attr("href"));
        $this.attr("href", "#");
    });
});
于 2012-08-27T09:21:16.327 回答
0

您始终可以使用目标:

$(document).ready(function() {
    $('.download_link').on('click', redirector); //bind to function
    $('.download_link').attr("href", "#");
});​

function redirector(event) {
    alert("creating redirector to "+event.target.href); //event.target
    return function(e) {redirect_link(e, destination)};
}

#但是,当您单击链接时,无论您使用什么,href 都将不再有效,因为您在单击处理程序之后的下一行将其设置为该值?

于 2012-08-27T09:23:13.687 回答