Мини библиотека для контроля ввода текста в TEXTAREA / INPUT
Привет всем!
Представляю вам очередную свою наработку. Хотя она уже и не новая, написано давно была в виде небольшого плагинчика. Но тут я решился уделить на нее время и немного ее переписать (хотя переписал полностью). И так, библиотека позволяет контролировать входные данные в текстовые поля, такие как INPUT и TEXTAREA. В использовании очень проста, особенно для тех кто хорошо знаком с регулярными выражениями. Она не требует писать какого либо кода, не засоряет HTML мусором. Я уже упоминал о ней в некоторых топиках этого форума, поэтому для кого-то она уже будет знакома. А тут я просто опишу ее возможности. Библиотека работает посредством делегирования, она не вешает на каждый элемент события, а слушает лишь один у корневого элемента. Что позволяет использовать ее для динамично вставленных элементов. Отлавливает события вставки текста из буфера обмена (кроме FireFox, в котором нет реализации clipboardData). Есть три основных атрибута с которыми она работает и по которым определяет свои действия: data-let-inputЭто три встроенных атрибута которые библиотека обрабатывает по умолчанию. Но есть возможность добавить собственные атрибуты для обработки. С помощью которых, вы легко сможете расширить функционал библиотеки. Делается это очень просто. При загрузке библиотеки, в глобальном пространстве появляется объект с именем letJS. Это не конструктор а обычный объект, имеющий метод setHandler в качестве первого параметра имя атрибута или массив имен атрибутов и в качестве второго параметра функция обработчик. Вот небольшой пример: letJS.setHandler('data-let-phone', function(event, unchanged) { if (!this.value) { this.value = event.rule; } if (unchanged) { if (event.type === 'blur') { if (this.value === event.rule) { this.value = ''; } return; } else { this.focus(); } } else if (event.insertValue) { var parts = event.insertValue.split(''); for(var i = 0; i < parts.length; i++) { this.value = this.value.replace(/^([^_]+)_/, '$1' + parts[i]); } } else if (event.cropValue) { this.value = this.value.replace(/(\+7.*)\d([^\d]*)$/, '$1_$2'); } var pos = this.value.indexOf('_'); event.selection(pos > 0 ? pos : this.value.length); return false; });Тут я написал небольшой плагинчик, реализующий проверку ввода телефонного номера, в тег мы помещаем атрибут со значением вида (+7 (___) ___-__-__): <input type="text" data-let-input="/^[0-9]+$/" data-let-phone="+7 (___) ___-__-__" placeholder="Ваш номер телефона" /> Все очень просто. Если нужно убрать обработчик, достаточно передать null вместо функции, пример: letJS.setHandler('data-let-phone', null); А теперь расскажу что получает функция обработчик и как/для чего это нужно использовать. Функция получает два входных параметра, причем первый основной, а второй вспомогательный, лишь для некоторых нужд. Первый параметр имеет объект со свойствами: originalEventВторой параметр это просто булевое значение, которое имеет true в том случае если в поле ввода ничего не меняли, а просто сместили каретку на другую позицию. -------------------------------------------------------------------- Пока на этом все. Скачать как обычно все можете у меня на гите: https://github.com/devote/letJS Вопросы, пожелания пишем! Всем спасибо! |
reserved
|
Цитата:
Любопытства ради: зачем в коде работа с выделением? https://github.com/devote/letJS/blob/master/let.js#L23 |
Цитата:
Но увы drag'n'drop идеально реализован лишь в двух браузерах, это Internet Explorer (дабы в нем он уж сто лет) и Opera... Остальные браузеры мне побороть пока не удалось, в них увы ни в какую не узнать того в какую часть текста хотят вставить фрагмент принесенный мышкой. То есть нужно получить координаты до того как его вставили (но этого не сделать в браузерах Chrome, FF, Safari). О Safari вообще другой разговор, в нем у меня событие drop не работает ни в какую. Если есть идеи или желание допилить drag'n'drop буду рад любым идеям. |
понятно, спасибо! :)
Цитата:
|
Внес небольшие изменения в библиотеку. Читайте выше
|
Часовой пояс GMT +3, время: 01:18. |