0

Webページ上のリンクをリダイレクトしようとしていますが、この簡単な例では、設定するCookieの簡単なチェックを実行するだけです。

そもそもそれがこの状況に対処する正しい方法であるかどうか、そして「download_link」クラスとのリンクがいくつかあるときに問題が発生するかどうかはわかりませんが、今でもそのようなリンクは1つだけです、宛先は未定義に設定されています。リダイレクタの呼び出しの$(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 に答える