1
$('a').click(function(e){return false;});

它成功地禁用了几乎所有地方的链接,但不适用于在本网站主题标签的工具提示弹出窗口中找到的链接(SO)。我查看了 DOM,它们确实是<a>标签。

怎么来的?

有没有更强大的方法来强制我的用户停留在当前页面上?(这是一个书签,我在其中以图形方式操作 DOM,因此我需要能够单击和拖动所有内容,包括链接。)

我知道,即使我可以禁用所有锚点上的常规点击功能,它也不会对由其他标签上的其他点击回调触发的任何导航执行任何操作。

4

3 回答 3

3

尝试使用 .on - 在例如 SO 站点中,这些链接是稍后创建的,然后附加您的事件

$(document).on('click', 'a', function(e) {
 return false;
});
于 2012-07-20T00:45:48.440 回答
1

我以前采用的一种技术是在整个文档上放置一个不可见的绝对定位元素。这实际上是由 Firebug Lite 使用的,以允许 Element Inspector 拦截任何点击。

然后,您需要担心的就是将事件侦听器附加到绝对定位的元素,并确定单击时鼠标下方的元素。幸运的是,所有现代浏览器都实现了一种识别方法:document.elementFromPoint。实现之间存在一些差异;这是我通常使用的方法(不幸的是,特征检测对此有点棘手,所以我正在做浏览器检测):

var scrollIsRelative = !($.browser.opera || $.browser.safari && $.browser.version < "532");
$.fromPoint = function(x, y) {

     if(!document.elementFromPoint) return null;

     if(scrollIsRelative)
     {
         x -= $(document).scrollLeft();
         y -= $(document).scrollTop();
     }

     return document.elementFromPoint(x, y);

};

将单击事件侦听器附加到绝对定位的 div 并在单击时隐藏您的 div 并调用此方法以获取元素,然后再次显示您的 div。例子:

$('#hugeDiv').on('click', function(ev) {
    var x = ev.pageX;
    var y = ev.pageY;
    $(this).hide();
    var el = $.fromPoint(x, y);
    $(this).show();

    //do stuff with el
});
于 2012-07-20T00:59:09.957 回答
0

看来解决方案是

window.onbeforeunload = function() {
  return "Are you sure you want to navigate away?";
}

如果我自己这么说,正确使用事件系统。

问题的原始范围不够广泛。这解决了导致我的问题的问题。

于 2012-07-20T00:34:29.223 回答