Мини библиотека для контроля ввода текста в 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, время: 06:26. |