Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.11.2013, 12:13
Аватар для mi.rafaylik
Кандидат Javascript-наук
Отправить личное сообщение для mi.rafaylik Посмотреть профиль Найти все сообщения от mi.rafaylik
 
Регистрация: 07.12.2012
Сообщений: 113

Перемещение фокуса при вставке текста
Есть событие paste, которое должно работать во всех браузерах последних версий, но на практике игнорируется в IE и есть странность в FireFox.
jQuery работает с ним посредством $('element').on('paste', function(){});

Замысел заключается в очистке форматирования вставляемого текста в div contenteditable.
1. Следим за событием paste в нашем div.
2. Запоминаем позицию курсора в div.
3. Перемещаем фокус в textarea, в котором текст вставится без форматирования.
4. Ставим небольшой таймаут. В это время текст из буфера обмена наконец попадает в textarea.
5. В полученном тексте убиваем два или более пробелов подряд, убиваем два или более переноса строк подряд, преобразуем переносы строк \n в <br>\n (т.е. визуально готовим текст для возврата в div).
6. Восстанавливаем позицию курсора в div.
7. Возвращаем уже простой текст обратно в div, в то место, куда вернули курсор.

Посмотреть в действии: http://jsfiddle.net/rafaylik/4k5rg/

Проблемы, которые хотелось бы решить:
1. IE (проверял в 10) совсем игнорирует наше событие paste и дефолтно вставляет форматированный текст.
2. В FireFox textarea получает фокус, но не получает текст из буфера обмена, то есть текст не попадает ни в div, ни в textarea.
Возможно ли вообще сделать решение кроссбраузерным (для последних версий)?

Вот та актуальная часть примера, которая переводит фокус:
<div id="format" contenteditable="true">Вставленный сюда текст преобразуется из форматированного в простой.</div>
<textarea id="plain">Сюда перенаправляем фокус и ловим текст</textarea>

$('#format').on('paste', function(){
	$('#plain').val('').focus();
});

Последний раз редактировалось mi.rafaylik, 12.11.2013 в 00:28.
Ответить с цитированием
  #2 (permalink)  
Старый 12.11.2013, 05:22
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

В последней версии firefox есть объект clipboardData. Он же есть в IE и WebKit
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 12.11.2013, 10:52
Аватар для mi.rafaylik
Кандидат Javascript-наук
Отправить личное сообщение для mi.rafaylik Посмотреть профиль Найти все сообщения от mi.rafaylik
 
Регистрация: 07.12.2012
Сообщений: 113

Сообщение от danik.js
объект clipboardData
Спасибо!
https://developer.mozilla.org/en-US/..._the_Clipboard

Последний раз редактировалось mi.rafaylik, 12.11.2013 в 11:03.
Ответить с цитированием
  #4 (permalink)  
Старый 12.11.2013, 23:57
Аватар для mi.rafaylik
Кандидат Javascript-наук
Отправить личное сообщение для mi.rafaylik Посмотреть профиль Найти все сообщения от mi.rafaylik
 
Регистрация: 07.12.2012
Сообщений: 113

clipboardData.getData() работает отлично, код получился короче, и фокус никуда не нужно перемещать.
Пример в действии (для Chrome, Safari, Firefox, Opera): http://jsfiddle.net/rafaylik/YMQPK/
Не получилось только в IE10 ловить событие paste, просто бубна под рукой нет )
А IE11 paste понимают, но с clipboardData работает как-то иначе, нужно разобраться будет..

Последний раз редактировалось mi.rafaylik, 14.11.2013 в 18:03.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вставка текста при открытии спойлера TrikS jQuery 9 07.03.2013 01:03
Перемещение блока при скроллинге FRIE jQuery 1 29.08.2012 02:45
Появление текста при наведении курсора на ссылку Александра Элементы интерфейса 1 11.05.2009 00:22
Подскажите как убрать часть текста при нажатии на кномпу или гиперссылку. potkin Общие вопросы Javascript 6 10.10.2008 07:55
Firefox: перехватить соббытие при перетаскивании текста no_alex Общие вопросы Javascript 9 21.08.2008 18:02