2011-01-26 55 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