Вход

Просмотр полной версии : выделение слова двойным щелчком


Скриптор
30.03.2010, 01:13
Как показали опыты, выделение слова двойным щелчком, каким-то образом задаёт необязательно эквивалентный результат тому, когда вы задаете вначале задаете первую позицию выделения (мышкой - 1 щелчок или же курсор здесь уже стоял), а дальше выделяете мышкой ли или с помощью стрелок.

Совпадают результаты только в таких традиционно редактируемых областях как "input" и "textarea". Если скажем подобное попробовать получить на примере "<div contentEditable='true'>", последует облом: выделенной областью будет "точка входа" по двойному щелчку, а вовсе не его результату, то есть выделенному блоку (обычно слову). При виделении для копирования, впрочем это незаметно (похоже, что не сказывается, а может просто не замечали).



В чем дело? Можно ли это как-то обойти?

Скриптор
31.03.2010, 12:37
Если понятней будет с кодом, то здесь (http://fastcoder.org/articles/?aid=187) подробнейшие объяснения.
.Задача простая: добится такого же поведения для "<div contentEditable='true'>" (я о двойном щелчке мыши по слову).
Решения достаточно для IE.


Все же никак не пойму, как же это так мышка выделяет, что результаты разные получаются?

subzey
31.03.2010, 23:01
Это defaultAction для браузера. Вы уверены, что хотите переопределить его? Учитывая, что пользователь привыкает к своему юзерагенту и любое отклонение от привычного поведения, пусть и кажущееся удобным, его приведет к повторному преодолению "когнитивного сопротивления"?

Скриптор
31.03.2010, 23:30
Такой проблемы для меня, к счастью, не стоит.

Меня интересует именно возможность повесить на конкретный div какой-нибудь обработчик, чтобы он воспроизводил такое же поведение, какое происходит в input и textarea по двойному щелчку.

Такое ощущение, что это что-то простое (вроде бы как получить координаты выделения), но я пока хожу вокруг и около. :(

subzey
01.04.2010, 00:47
Что ж…

defaultAction выполняется после всех обработчиков javascript, и отменить его можно, вызвав event.preventDefault (W3C) или event.returnValue = false (MS).

Событие click наступает после последовательных mousedown и mouseup над одним и тем же местом на экране (над одним и тем же элементом в HTML5). Событие dblclick — два последовательных клика. event.detail возвращает количество щелчков, т.е, полноценная замена несуществующим tripleclick, quadripleclick и т.п.

Дерзайте!