2009-11-28 6 views
1

Теперь я поймаю события щелчка мыши на элементах textarea.Проблема, связанная с MouseEvents

Поскольку я должен прекратить распространение после обработки события, карет не будет установлен как обычно, когда мы будем использовать щелчок по текстовым полям со средним ключом. Но мне нужно установить его перед выполнением дальнейших работ, поэтому я попытался вручную отправить событие мыши.

Мой код:

var evt = document.createEvent("MouseEvents"); 
evt.initMouseEvent("click", true, true, window, 1, origEvt.screenX, origEvt.screenY, 
    origEvt.clientX, origEvt.clientY, false, false, false, false, 0, null); 
origEvt.target.dispatchEvent(evt); 
... 

Этот код пытается имитировать левой кнопкой мыши на одном элементе в том же положении. Отправленное событие можно поймать, но, однако, каретка не установлена.

Может ли кто-нибудь вести меня, как это сделать?

+0

есть ли причина, по которой пользователь не должен оставлять клик, чтобы установить положение каретки? Это будет ожидаемое поведение, и редко есть веская причина для изменения ожидаемого поведения. –

+0

@Jonathan: Это расширение расширений firefox, и когда пользователь посещает элемент ввода, он будет вставлен туда независимо от позиции каретки. –

ответ

1

Faking events не вызывает действия по умолчанию. Вы должны сами их воспроизвести.

В этом случае вам нужно будет использовать selectionStart и selectionEnd, чтобы установить положение фокуса ввода в текстовом поле. Однако получение соответствующих смещений строк из местоположения мыши было бы довольно сложным.

Непонятно, для чего цель заключается в том, что вы пытаетесь сделать, но вам придется найти другое обходное решение. Возможно, вы можете разрешить действие по умолчанию, но затем размыть текстовое поле после его завершения и сфокусировать его позже? Вы также можете вспомнить /selectionEnd свойства сразу после щелчка, чтобы установить фокус назад в любой последующий момент, если позиция может измениться за это время.

+0

Спасибо за ответ. Но я не могу позволить, чтобы действие по умолчанию происходило с тех пор, как в Gnome, средний клик будет вставлять что-то время от времени. Мне нужно будет найти другой способ ... –

+0

Ужасная идея: разрешить вставку, но затем вернуть текстовое поле в свое предыдущее значение и установить точки выбора в том месте, где значение было изменено? – bobince

+0

Да, это действительно ужасно ... Спасибо. Я нашел другой путь. –

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