Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.09.2015, 20:02
Аспирант
Отправить личное сообщение для IONEX Посмотреть профиль Найти все сообщения от IONEX
 
Регистрация: 08.01.2012
Сообщений: 32

Исп. селектора filter для вызова плагина
Добрый вечер!
Задача создать форму регистрации в которой присутствуют как поля ввода, так и списки с выбором региона/страны. На данном этапе реализую обработку введенных данных.

$('input').bind('keyup change',function(){
        //Если измененное поле не пустое, то:
        if ($(this).val() !== ''){
            $(this).check_input();
            $(this).filter('.login.enebled').check_login();
            $(this).filter('.password_retype').check_password_retype();
        }
    });


Создал плагин check_input, который общий для всех полей ввода + плагины с доп. проверкой, которые должны запускаться только для соотв. класса - check_password_retype и др.

Вопрос такой: при использовании filter ожидаю, что поле ввода которое не имеет соотв. класс отфильтруется и плагин не будет выполнен, но в результате выполняются все плагины по очереди. Какие пути решения?

+ дополнительный вопрос.
Процедура срабатывает два раза по keyup (необходимо для полей ввода) и change (необходимо для списков). Пока не критично, но как сделать чтобы процедура срабатывала по keyup и не работала по change?
Ответить с цитированием
  #2 (permalink)  
Старый 06.09.2015, 21:06
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

IONEX,

попробуйте так
$('input').on('input',function(){
        //Если измененное поле не пустое, то:
        if ($.trim(this.value)){
            $(this).check_input();
            $(this).filter('.login.enebled').check_login();
            $(this).filter('.password_retype').check_password_retype();
        }
    });


Сообщение от IONEX
Вопрос такой: при использовании filter ожидаю, что поле ввода которое не имеет соотв. класс отфильтруется и плагин не будет выполнен, но в результате выполняются все плагины по очереди.
а неизвестно как ваши плагины устроены - если вы три плагина запускаите, то почему они не должны сработать?
Ответить с цитированием
  #3 (permalink)  
Старый 06.09.2015, 23:29
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

Сообщение от IONEX
при использовании filter ожидаю, что поле ввода которое не имеет соотв. класс отфильтруется и плагин не будет выполнен
это неправильное ожидание. Плагин выполнится в любом случае после filter. Просто в случае неподходящего класса плагин на входе получит объект нулевой длины.
http://jsfiddle.net/1xe4ea45/
Проверяйте длину в начале плагина и делайте return если она нулевая. Или лучше вместо фильтра использовать более очевидное if($(this).hasClass('password_retype') {}
ИМХО
Ответить с цитированием
  #4 (permalink)  
Старый 06.09.2015, 23:59
Аспирант
Отправить личное сообщение для IONEX Посмотреть профиль Найти все сообщения от IONEX
 
Регистрация: 08.01.2012
Сообщений: 32

Благодарю за ответы!

Сообщение от BETEPAH Посмотреть сообщение
это неправильное ожидание. Плагин выполнится в любом случае после filter. Просто в случае неподходящего класса плагин на входе получит объект нулевой длины.
http://jsfiddle.net/1xe4ea45/
Проверяйте длину в начале плагина и делайте return если она нулевая.
ИМХО
Почти так и сделал:
if (this.val() === undefined){
            return;
        }

Что касается if, то основной код, как мне кажется, получится сильно громоздким если в каждом if будет около 15 строк. Поэтому стараюсь все сделать с использованием плагинов и процедур, да, и править легче.

Рони, Ваш совет также помог - с input все работает!

Еще раз, всем спасибо!
Ответить с цитированием
  #5 (permalink)  
Старый 07.09.2015, 02:08
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от IONEX
if (this.val() === undefined){
return;
}

Что касается if, то основной код, как мне кажется, получится сильно громоздким если в каждом if будет около 15 строк.
Это в чем так можно сделать - this.val()?

if(!$.trim(this.value)) return;

а проверить наличие объекта, это

if(!$('selector').length) return;

Единственный retun в условии при наличии фигурных скобок, это уже два лишних байта, да еще переход на строки...
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
написание события для плагина cmygeHm jQuery 1 08.02.2011 16:40
Помощь в исправлении виджета для плагина Tablesorter Glook jQuery 0 24.12.2010 19:37
Подскажите плизз с выбором селектора для select option frolvict jQuery 2 13.11.2010 15:29
Скрипт для плагина к Download Master ponand Общие вопросы Javascript 21 05.01.2009 22:12
Написание плагина для Firefox SunnyDay Общие вопросы Javascript 2 02.12.2008 15:21