2014-02-13 69 views
0

我试图触发点击事件的链接从一个点击处理程序中的同一链接。我想要停止导航链接,直到用户收到某些操作的通知。一旦行动完成,链接应该正常导航。触发点击从点击处理程序内

请参阅下面的测试用例。

<!DOCTYPE html> 
<html> 
    <head> 
     <title></title> 
     <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" type="text/javascript"></script> 
    </head> 
    <body> 
     <script language="javascript" type="text/javascript"> 
      $(function() { 
       $("#test").click(function (e) { 
        var lnk = $(this); 

        if (lnk.data("checked") != true) { 

         var notice = $('<a href="#">Continue</a>'); 
         $('body').append(notice); 

         notice.click(function (e) { 
          lnk.data("checked", true); 
          lnk.click(); 

          return false; 
         }); 

         return false; 
        } 

        alert("should navigate now"); 
       }); 
      }); 
     </script> 

     <a id="test" href="http://www.google.com">Test</a> 

    </body> 
</html> 

该示例的预期行为是;

  • 测试点击
  • 继续出现
  • 继续点击
  • 页面导航到 '测试'

的href相反,被点击继续,警报 '现在应该导航'显示,但浏览器不执行任何操作。

+1

手动触发可能不会触发元素 –

+0

检查类型lnk.data(“选中”)''的的默认行为,它可能被认为不是'falsy' –

+0

@ArunPJohny你有参考吗? – Alex

回答

1

尝试使用DOM元素

notice.click(function (e) { 
     lnk.data("checked", true); 
     lnk[0].click(); 
     // ^^^^ 
     return false; 
    }); 

DEMO

+0

这可行。你知道为什么吗?推测jQuery是干扰,它是否有某种'潜在的无限循环'检查? – Alex

+0

@Alex我不确定为什么jQuery不允许链接的默认行为,但我认为它是有意的。 – Anton

+0

@Alex在这里找到了一些信息http://stackoverflow.com/a/5867423/1696560'您只能触发jQuery创建的点击。这是jQuery的一个可爱的小怪癖。' – Anton

0

只需在警报后添加document.location.href = lnk.attr('href');

我想,问题出现了,因为警报会中断回调。

0

不知道这是你想要的,但尝试重写你这样的代码:

$(function() { 
    $("#test").click(function (e) { 
     e.preventDefault(); 
     if ($(this).data("checked") != true) { 
      var notice = $('<a class="link" href="#">Continue</a>'); 
      $('body').append(notice); 
     } 
     alert("should navigate now"); 
    }); 

    $(document).on('click', '.link', function (e) { 
     $("#test").data("checked", true); 
     window.location = $("#test").attr('href'); 
    }); 
}); 
0

我知道这触发点击已经很老了,但我想从现在开始为那些发现这个问题和答案的人做出贡献。

如果您尝试确认用户是否想离开某个网站,请考虑window.onbeforeunload事件处理程序。您可以在类似警报的消息框中输入显示给用户的字符串消息。

<script> 
window.onbeforeunload = function (e) { 
    e = e || window.event; 

    // For IE and Firefox prior to version 4 
    if (e) { 
     e.returnValue = 'Sure?'; 
    } 

    // For Safari 
    return 'Sure?'; 
}; 
</script> 

检查第一个答案在这里:点击事件的 Confirmation before closing of tab/browser