我有一个用于锚标记的jquery,它首次调用ajax,然后当成功返回时,它再次调用click。在第二次调用时,它返回true但锚链接不起作用。
以下是我的代码
HTML:
<a href="#" class="test-link" target="_blank">test</a>
jQuery的:
$(document.ready(function(){
$('.test-link').click(function(){
if ($(this).hasClass('test')){
$(this).removeClass('test');
return true;
} else {
$.ajax({
...
...
success : function(data) {
$('.test-link').attr('href',data.url).addClass('test').click();
}
});
return false;
}
});
这对我不起作用,我也尝试过使用preventDefault();但没用。
注意:在第一次点击时,它会调用ajax,当它成功时,它会设置锚点和类的URL,然后再次调用点击,
但点击不会导航到其他页面。
答案 0 :(得分:1)
触发锚点的点击事件不会将重定向到自动指定的页面。
您必须点击明确链接才能导航到其他页面。
您可以使用
window.open('','','width=200,height=100') ; // instead`
您可以尝试这种方法
if ($(this).hasClass('test')){
$(this).removeClass('test');
window.open('','','width=200,height=100')
}
答案 1 :(得分:1)
您可以使用window.open()
,但就click()
工作而言,您可以这样做:
$('.test-link').click(function(){
if ($(this).hasClass('test')){
$(this).removeClass('test').off('click'); // unbind click handler
this.click(); // call native click()
} else {
$.ajax({
...
...
success : function(data) {
$('.test-link').attr('href',data.url).addClass('test').click();
}
});
return false;
}
});
使用this.click()
将直接调用DOM元素的click()
方法而不是jQuery click()
方法 - 我在过去发现这将导致链接的默认行为实际工作(即,它将导航到指定的URL),而jQuery click()
方法将执行您已分配但不实际导航的处理程序。
但是你还需要取消绑定点击处理程序,以便它不会进入无限循环。这意味着从那时起链接将始终在新选项卡中打开相同的URL,它不会进一步发出Ajax请求。那可以接受吗?
答案 2 :(得分:0)
这将在新标签页中打开页面而不是弹出窗口
window.open(url,'_blank');
我认为应该是,
if ($(this).hasClass('test')){
$(this).removeClass('test');
window.open($(this).text(),'_blank');
}