Виртуальная клавиатура и буфер обмена
Здравствуйте. Возникло несколько вопросов, ответ на которые не смог найти. Подскажите, пожалуйста:
1. Встал вопрос в написании небольший виртуальной клавиатуры. Есть ли в JS возможность эмулировать нажатия кнопок на клавиатуре? Нашел, что можно считывать событие нажатия, а вот создать такое событие - что-то глухо. При этом, полно работающих клавиатур, очевидно, как-то делают это люди. Хотелось бы нативный вариант, без jQuery и других фреймворков. Если можно, подскажите, как это сделать, или ткните носом, где почитать. 2. Есть ли возможность работать с буфером обмена? Задача была такова, чтобы информацией с одного сайта заполнить форму на другом, но, как я уже выяснил, сделать это одним скриптом не удастся из-за разных доменов. Хотелось бы, в таком случае, сделать это в два клика, используя буфер обмена в качестве временного хранилища. Как можно писать в него и читать из него? Заранее спасибо за ответы. |
Цитата:
Цитата:
|
Напрямую вставлять - так я уже реализовал. Добавляю нажатый символ к .value нужного поля. Но беда в том, что такой метод не использует курсор ввода - дописать в середину ничего не выходит. Как это исправить?
|
Цитата:
|
Цитата:
|
Пишу потихоньку, возник один вопрос.
У неИЕ браузеров есть selectionStart и selectionEnd для определения начала и конца выделения. А вот у ИЕ с их TextRange таких свойств вроде как нету. Как, в таком случае, узнать смещение выделения в ИЕ? Суть проблемы заключается в следующем. Есть такой кусочек кода: var select = document.selection.createRange(); select.text = number; Он работает как надо, вставляя number туда, где находится каретка. Но если выделить часть введенной информации и запустить этот код (в моем случае - он запускается как часть функции) - то он отработает как и задумано, кроме одного момента - пропадает каретка. И даже form.focus() ее не возвращает - видимо, пропадают координаты места, где она должна стоять. Как это поправить? |
Цитата:
на всякий случай - надо делать focus для текстареи, а не для формы. |
form в данном случае - переменная, содержащая input. И вроде как эта запись работает во всех иных случаях.
|
В общем, мои попытки успехом так и не увенчались. Вот полный код странички, если кто-то захочет протестировать самостоятельно:
<!doctype html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <input id="text" onfocus="focused = true;" onblur="focused = false;" style="margin: 20px 0;"><br> <button onclick="addNumber(1)">1</button> <button onclick="addNumber(2)">2</button> <button onclick="addNumber(3)">3</button><br> <button onclick="addNumber(4)">4</button> <button onclick="addNumber(5)">5</button> <button onclick="addNumber(6)">6</button><br> <button onclick="addNumber(7)">7</button> <button onclick="addNumber(8)">8</button> <button onclick="addNumber(9)">9</button><br> <button onclick="">x</button> <button onclick="addNumber(0)">0</button> <button onclick="">x</button><br> <script> var focused = false; var form = document.getElementById("text"); var IE = top.execScript?true:false; //true только для IE form.focus(); function addNumber(number) { form.focus(); if (!IE) { if (focused) { var start = form.selectionStart; var end = form.selectionEnd; form.value = form.value.slice(0, start) + number + form.value.slice(end); form.setSelectionRange(start+1, start+1); form.focus(); } } else { if (document.selection.createRange().parentElement().id == "text") { var select = document.selection.createRange(); select.text = number; form.focus() } } } </script> </body> </html> И еще. Обратил внимание, что Хром и фф в случае выделения части введенной информации и клике на цифру корректно заменяет ее (такого поведения я и хочу добиться от всех браузеров), опера НЕ заменяет, но добавляет в конец (судя по всему, она при нажатии кнопки сбрасывает выделение, оставляя только каретку, и в итоге уже в функции начало и конец выделения - одна и та же точка), а вот ИЕ... В общем, вот ИЕ я не понимаю вообще. Он не делает то, что я предполагал, но иногда при нажатии кнопки почему-то (???) вдруг ставит каретку. Я решительно не понимаю, чем руководствуется этот браузер, и никакой закономерности проследить у меня не вышло. Помогите разобраться с этой поганью, пожалуйста... |
Часовой пояс GMT +3, время: 19:08. |