1

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

4

3 回答 3

1

触发锚点的点击事件不会自动重定向到指定的页面。

您必须明确单击该链接才能导航到不同的页面。

您可以使用

window.open('','','width=200,height=100') ; // instead`

你可以试试这个方法

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

    window.open('','','width=200,height=100')
}
于 2012-11-01T23:06:42.267 回答
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;
    }
 });

Usingthis.click()将直接调用 DOM 元素的click()方法而不是 jQueryclick()方法 - 我过去发现这将导致链接实际工作的默认行为(即,它将导航到指定的 url),而 jQueryclick()方法将执行您已分配但未实际导航的处理程序。

但是您还需要取消绑定单击处理程序,以免它进入无限循环。这意味着从那时起,链接将始终在新选项卡中打开相同的 URL,它不会发出进一步的 Ajax 请求。这可以接受吗?

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

于 2012-11-01T23:09:24.267 回答
0

这会在新选项卡中打开页面,而不是在弹出窗口中

  window.open(url,'_blank');

我觉得应该是

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

window.open($(this).text(),'_blank');
}
于 2012-11-01T23:22:30.043 回答