我正在尝试重定向网页上的链接,在这个简单的示例中,它只是通过简单的检查来设置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", "#");
});
答案 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都将为#
,因为您在点击处理程序后的下一行将其设置为该值?