2011-01-26 62 views
6

我有以下事件处理代码:jQuery的文本选择事件

$('#main').delegate('.slide', 'click', function() { 
    slideshow.next(); 
}); 
$('#main').delegate('a', 'click', function (e) { 
    e.stopPropagation(); 
}); 

​​是一个大格的内容。当单击​​时除外单击链接时调用slideshow.next(),在这种情况下stopPropagation()和​​永远不会收到单击事件。

我想让选择幻灯片上的文本成为可能。此刻,如果我点击并拖动,当我释放鼠标时选择工作但​​注册点击并激活slideshow.next()功能。有我能拦截的事件吗?

该页面为available here


编辑:有趣的是,如果选择跨越多个HTML元素,click不解雇,但它的选择是一个元素中,它被激发。


EDIT2:好吧,这里是我的解决方案:

function setupHandlers() { 
    var prevX = 0; 
    var prevY = 0; 

    $('#main').delegate('.slide', 'click', function (e) { 
    var clickTolerance = 2; 
    var dx = Math.abs(e.pageX - prevX); 
    var dy = Math.abs(e.pageY - prevY); 
    //if mouse has moved less than two pixels in any direction this is a click 
    if (dx < clickTolerance && dy < clickTolerance) { 
     slideshow.next(); 
    } 
    }); 
    $('#main').delegate('.slide', 'mousedown', function (e) { 
    prevX = e.pageX; 
    prevY = e.pageY; 
    }); 
    $('#main').delegate('a', 'click', function (e) { 
    //Clicks on links shouldn't fire '.slide'.click() above 
    e.stopPropagation(); 
    }); 
} 

回答

2

单击和单击选择文本有什么区别?

我会说它可能与鼠标点击和鼠标点击之间经过的时间有关。或者更重要的是,它可以通过在点击鼠标时和鼠标向上事件时鼠标的屏幕位置的差异来诊断。

当mouseDown事件触发时,记录event.pageX和event.pageY值。 当mouseUp事件被触发时,比较存储的x,y坐标与当前值。如果它们不同,那就是文本选择...什么也不做。如果他们是相同的,交换你的页面。

不知道如何在JScript不幸的是实现这个;)

0

使用$('.slide').select赶选择事件,并停止传播。

+0

`.select`仅适用于表单元素:( – Skilldrick 2011-01-26 23:20:02

+0

我不想投下来,但它是错误的答案 - 。选择是形式文本选择,而不是一般的文本选择 – Skilldrick 2011-01-26 23:33:04