Работа с текстом, выделенным в textarea (opera+ff)
На странице есть форма с несколькими input и несколькими textarea. Нужно сделать две кнопки, при нажатии на которые текст, выделенный в данный момент в одном из этих элементов формы - менял бы свой регистр (верхний/нижний).
В опере это сделать просто: function sToLow() { var str, rng; str = document.selection; rng = str.createRange(); rng.text=rng.text.toLowerCase(); } - на соответствующую кнопку вешается срабатывание данной функции. Но в фф это не работает. В голову приходит только использовать selectionStart и selectionEnd у полей ввода в формах, но проблема в том что пользователь может выделить текст одновременно в нескольких полях ввода и нет(?) возможности узнать какое выделение именно сейчас активно. Ну ладно, с помощью события onfocus или onblur можно узнать какое из полей ввода было активно в последний раз. Но тогда возможны случайные срабатывания по сценарию: - пользователь выделил текст, но потом потом убрал фокус (например кликнул мышкой на странице за пределами формы); - затем он случайно нажимает по одной из кнопок, но подвоха в этом не видит (он ведь не держит в памяти, что где-то там текст остался выделен). Избежать такого случайного срабатывания пришло на ум только с помощью события onmousedown на элементе body и установкой там переменной (мол, теперь нигде текст не выделен). Плюс, на случай если фокус снимается не мышкой, а TAB-ом, надо повесить ещё аналогичную установку этой переменной на событие onfocus элементов, предшествующих и следующих за нужными полями ввода. В результате вроде всё должно работать как положено, но, блин, это же маразм какой-то и костыль на костыле получается (вместо простейшей функции, работающей в Опере). Может есть какой-то более правильный способ сделать то же самое? Фреймворки не предлагать. |
Вообще ваш код для IE, просто Opera поддерживает и майкрософтовский способ работы с выделением, помимо стандартного. Подробнее тут: http://habrahabr.ru/blogs/javascript/55922/
Выделение сбрасывается автоматически во многих случаях, что вы написали. |
Цитата:
Цитата:
|
Цитата:
|
Цитата:
Зато в ней работает document.getSelection() для полей ввода форм, в отличии от фф. Но в итоге всё-равно нужен универсальный безкостыльный способ, или хотя бы вариант с меньшим кол-вом костылей. |
Цитата:
|
Цитата:
Раньше это было огромным преимуществом Оперы - поддержка модели IE. Уж сколько раз я намучился в последнем проекте с тем, что случайно забывал передать объект-событие из функции-обработчика в вызываемую из него функцию. В Опере это оставалось безнаказанным - ведь там был window.event (или ещё есть?), и код вызываемой функции получал ссылку на него (в отсутствие переданного параметра). А в Firefox всё разваливалось. А теперь, похоже, в Опера всё будет как в FF. |
Цитата:
|
хотя window.event имеет значение null :-?
объект эвента удалили, а имя объекта забыли :D |
popov654,
в хроме тоже так можно, радуйтесь. А по хорошему конечно, забывать не стоит, сделайте себе функцию которая будет передавать в обработчики первым аргументом корректное событие, тогда и проблем не будет. |
Часовой пояс GMT +3, время: 15:47. |