JavaScript. Подробное руководство, 6-е издание, стр. 268
<b> // не установить его в значение "move" в обработчике ondrop выше.</b><b> // Но принудительная установка в значение "move" для IE будет</b><b> // препятствовать другим броузерам дать пользователю возможность</b><b> // выбирать между операцияим перемещения и копирования,</b><b> if (e.dataTransfer.dropEffect === "move") target.parentNode.removeChild(target);</b><b> }</b><b> // Вспомогательная функция, используемая в обработчиках ondragenter и ondragleave.</b><b> // Возвращает true, если элемент а является дочерним по отношению к элементу b.</b><b> function ischild(a,b) {</b><b> for(; а; а = a.parentNode)</b><b> if (а === b) return true;</b><b> return false;</b><b> }</b><b> }</b><b>});</b>17.8. События ввода текста
Броузеры поддерживают три старых события ввода с клавиатуры. События «keydown» и «keyup» являются низкоуровневыми событиями и рассматриваются в следующем разделе. Однако событие «keypress» является высокоуровневым, сообщающим, что был введен печатаемый символ. Проект спецификации «DOM Level 3 Events» определяет более обобщенное событие «textinput», генерируемое в ответ на ввод текста, независимо от того, каким способом он был введен (например, с клавиатуры, копированием данных из буфера обмена или с помощью операции буксировки, методом ввода текста на азиатских языках или с помощью системы распознавания речи или распознавания рукописного текста). На момент написания этих строк событие «textinput» еще не поддерживалось, но броузеры на основе ядра Webkit поддерживали очень похожее событие «textInput» (с заглавной буквой «I»).
С предлагаемым событием «textinput» и реализованным в настоящее время событием «textInput» передается простой объект события, имеющий свойство
<b>data</b><b>inputMethod</b><b>data</b>Объект события, передаваемый с событием «keypress», имеет более сложную организацию. Событие «keypress» представляет ввод единственного символа. Этот символ содержится в объекте события в виде числового значения кодового пункта Юникода и, чтобы преобразовать его в строку, необходимо использовать метод
<b>String.fromCharCode()</b><b>keyCode</b><b>charCode</b><b>charCode</b>События «textinput», «textinput» и «keypress» можно отменить, чтобы предотвратить ввод символа. То есть эти события можно использовать для фильтрации ввода. Например, можно предотвратить ввод алфавитных символов в поле, предназначенное для ввода числовых данных. В примере 17.6 демонстрируется модуль на языке JavaScript, реализующий такого рода фильтрацию. Он отыскивает элементы
<b><input type=text></b><b>data-allowed-chars</b><b>data-allowed-chars</b>Пример 17.6. Фильтрация ввода пользователя
<b>/**</b><b>* InputFilter.js: фильтрация ввода для элементов <input></b><b>*</b><b>* Этот модуль отыскивает все элементы <input type="text"> в документе, имеющие</b><b>* атрибут "data-allowed-chars". Регистрирует обработчики событий keypress, textinput</b><b>* и textinput для этих элементов, чтобы ограничить набор допустимых для ввода символов,</b><b>* чтобы разрешить вводить только символы, указанные в атрибуте. Если элемент <input></b><b>* также имеет атрибут "data-messageid", значение этого атрибута интерпретируется как id</b><b>* другого элемента документа. Если пользователь вводит недопустимый символ, элемент</b><b>* с указанным id делается видимым. Если пользователь вводит допустимый символ, элемент</b><b>* с сообщением скрывается. Данный элемент с сообщением предназначается для вывода</b><b>* пояснений, почему ввод пользователя был отвергнут. Его оформление необходимо</b><b>* реализовать с помощью CSS так, чтобы изначально он был невидим.</b><b>*</b><b>* Ниже приводится образец разметки HTML, использующей этот модуль.</b><b>* Zipcode: <input id="zip” type="text"</b><b>* data-allowed-chars="0123456789" data-messageid="zipwarn"></b><b>* <span id="zipwarn" style="color: red; visibility: hidden">TonbKo цифры</зрап></b>