锚点标记单击不适用于jquery中的return true语句

时间:2012-11-01 22:53:25

标签: javascript jquery html html5

我有一个用于锚标记的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,然后再次调用点击,
  但点击不会导航到其他页面。

3 个答案:

答案 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请求。那可以接受吗?

演示:http://jsfiddle.net/Pdwt8/1/

答案 2 :(得分:0)

这将在新标签页中打开页面而不是弹出窗口

  window.open(url,'_blank');

我认为应该是,

if ($(this).hasClass('test')){
$(this).removeClass('test');

window.open($(this).text(),'_blank');
}