2011-01-26 2 views
6

У меня есть следующий код события обработки:JQuery события выделения текста

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

.slide является большим ДИВ с содержанием. slideshow.next() вызывается при нажатии на кнопку .slide, за исключением случаев, когда нажимается ссылка, и в этом случае stopPropagation() и .slide никогда не получает событие click.

Я хочу, чтобы можно было выбрать текст на слайде. На данный момент, если я нажимаю и перетаскиваю, когда я отпускаю мышь, выбор работает, но .slide регистрирует щелчок и запускает функцию slideshow.next(). Есть ли какое-то событие, которое я могу перехватить?

Страница: available here.


Edit: Интересно, что если выбор охватывает более чем один элемент 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

спасибо, я думал, что это может быть единственным решением. – Skilldrick

+0

@Skilldrick Дайте мне знать, если вы попробуете это ~ удачи. –

+0

Я пошел с этим решением - обновил вопрос с моим рабочим кодом. Cheers :) – Skilldrick

0

использование $('.slide').select поймать событие выбора и остановить распространение.

+0

'.select' работает только для элементов формы :( – Skilldrick

+0

я не хочу, чтобы проголосовать это вниз, но это неправильный ответ - .select для формы текстовый выбор, а не общий выбор текста. – Skilldrick

Смежные вопросы