【发布时间】:2016-03-22 10:00:53
【问题描述】:
我编写了以下脚本。
<script>
$(document).ready(function(){
$('a').data('loop',true);
$('body').on('click', 'a', function(event){
console.log($(this).data('loop'));
if ($(this).data('loop') == 'true') {
console.log('hit');
event.preventDefault();
caller = $(this);
$(this).data('loop',false);
var linkref = $(this).attr('href');
var linkpos = $(this).offset();
var screenwidth = $(window).width();
var json_data = JSON.stringify({linkref: linkref, linkpos: linkpos, screenwidth: screenwidth});
$.ajax({
url: "content/submitcontenthandler?handler=core/_dashboard&method=tracking_ping",
method: "POST",
data: "json=" + json_data,
complete: function (jqXHR, status) {
console.log(status);
console.log(caller);
$(caller).click();
}
});
} else {
console.log(event.isDefaultPrevented());
console.log('miss');
$(this).data('loop',true);
}
});
});
</script>
它有效,向我发送我想要的详细信息等。但是!!!
当我单击一个链接时,它会通过 Ajax 向我触发详细信息,然后它意味着再次“单击”该事件,它确实如此!但该事件不会触发它的正常动作。因此,当单击指向另一个页面的链接时,我会转到另一个页面......这不会发生。
如果我注释掉 event.preventDefault();然后事件按我的预期触发......
所以在我看来,event.preventDefault 似乎正在执行,即使它不应该在第二次调用期间执行...
抱歉,如果这有点难以理解。我自己也不太明白发生了什么。 这可能是一个错误,还是我所做的事情导致了这种情况?
我认为我做不到,但我已经成功地为此做了一个 jsfiddle。 https://jsfiddle.net/atg5m6ym/2001/
【问题讨论】:
-
看起来您分配给
caller的值不正确,应该是$(this)而不是this。 -
@KallumTanton 谢谢,我已经完成了更新。它的功能仍然相同,(尽管我可以看到现在的对象和以前的字符串之间的区别)但是当我单击链接时它仍然没有将我发送到目的地......
-
我认为你应该把第一个语句放在“准备好”函数中
-
$(caller).click()不会重定向到锚目标,如果这是您所要求的。 -
@TolMera 您想在通过 ajax 在服务器上保存点击数据后将用户重定向到链接点击的 href 对吗?
标签: javascript jquery ajax loops preventdefault