将网页上的链接重定向到javascript函数

时间:2012-08-27 09:15:21

标签: javascript jquery

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

不确定这是否是首先处理这种情况的正确方法,如果我在“download_link”类有多个链接时遇到问题,但即使是现在,只有一个对于这样的链接,目标设置为undefined,看起来调用重定向器中的$(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", "#");
    });

3 个答案:

答案 0 :(得分: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", "#");
  });
});

答案 1 :(得分:1)

$(function() { // <-- Short for $(document).ready(function() {
    $('.download_link').each(function() {
        var $this = $(this);

        $this.click(redirector($this.attr("href"));
        $this.attr("href", "#");
    });
});

答案 2 :(得分: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都将为#,因为您在点击处理程序后的下一行将其设置为该值?