За последние 24 часа нас посетили 24352 программиста и 1725 роботов. Сейчас ищут 1766 программистов ...

Удаление класса при заполненных полях

Тема в разделе "JavaScript и AJAX", создана пользователем winsok, 5 апр 2018.

  1. winsok

    winsok Активный пользователь

    С нами с:
    13 сен 2016
    Сообщения:
    82
    Симпатии:
    1
    Приветствую. Есть большая форма.
    В ней есть два поля: email и телефон. Поля обязательны к заполнению. После заполнения их нужно удалить класс у кнопки.
    Дополнительно поле email нуждается в валидации. А у поля телефон маска, с помощью input.mask.min.
    HTML:
    1.  
    2. <div class="panel-body">
    3.     <div class="row">
    4.         <div class="col-xs-12 col-sm-12 col-md-6" id="userMail">
    5.             <p>Введите электронную почту:</p>
    6.             <input type="text" name="userMail" id="userMail" placeholder="Адрес электронной почты" class="item" />
    7.             <div class="error"></div>
    8.         </div>
    9.         <div class="col-xs-12 col-sm-12 col-md-6" id="userPhone">
    10.             <p>Введите номер телефона:</p>
    11.             <input type="text" name="userPhone" id="userPhone" placeholder="Номер телефона" class="item" />
    12.             <div class="error"></div>
    13.         </div>
    14.     </div>
    15.     <div class="skip-and-save">
    16.         <div class="row">
    17.             <div class="skip col-xs-12 col-sm-12 col-md-6" style="line-height:37px;">
    18.                 Или можете <span data-skip-id="1">пропустить этот шаг</span>
    19.             </div>
    20.             <div class="save col-xs-12 col-sm-12 col-md-6 text-right hidden">
    21.                 <a href="#" class="btn btn-default">Сохранить</a>
    22.             </div>
    23.         </div>
    24.     </div>
    25. </div>
    26.  
    сделал вот так, но срабатывает только когда кликаешь куда угодно после поля userMail. А как сделать чтоб срабатывало после обоих полей незнаю

    Код (Javascript):
    1. $('.item').blur(function() {
    2.     var temp = 0;
    3.     if ($('#userMail input').val() != '') {
    4.         if ($(this).attr('id') == 'userMail') {
    5.             var pattern = /^([a-z0-9_\.-])+@[a-z0-9-]+\.([a-z]{2,4}\.)?[a-z]{2,4}$/i;
    6.             if (pattern.test($(this).val())) {
    7.                 temp = 1;
    8.                 $('#userMail .error').text('');
    9.             } else {
    10.                 temp = 0;
    11.                 $('#userMail .error').text('Введите правильный адрес электронной почты');
    12.             }
    13.         }
    14.     }
    15.     if (temp == 1 && $('#userPhone input').val() != '') {
    16.         $('.save').removeClass('hidden');
    17.     } else {
    18.         $('.save').addClass('hidden');
    19.     }
    20. });
    Помогите
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    блюр это событие когда ты с элемента уходишь

    а еще можно завеситься на onchange и keypress
     
  3. gruth

    gruth Активный пользователь

    С нами с:
    13 май 2017
    Сообщения:
    224
    Симпатии:
    18
    Логика канешн.. Вешая событие на класс, jquery каждому элементу его назначает. В данном случае их 2. Зис это тот элемент который вызвал событие, стало быть зис.ид можно узнать ид, а зис.вэлью покажет значенте. Не нужно все подрят оборачивать в jquery!
     
  4. winsok

    winsok Активный пользователь

    С нами с:
    13 сен 2016
    Сообщения:
    82
    Симпатии:
    1
    а сделать то как?)
     
  5. gruth

    gruth Активный пользователь

    С нами с:
    13 май 2017
    Сообщения:
    224
    Симпатии:
    18
    Хорошо.. Представь что тебе задач нарезали палить форму. Что ты будешь делать если реагировать можешь только на потерю фокуса и только у одного, конкреиного инпута
     
  6. winsok

    winsok Активный пользователь

    С нами с:
    13 сен 2016
    Сообщения:
    82
    Симпатии:
    1
    Почему у одного?) клас же установлен и обоих инпутов)
     
  7. gruth

    gruth Активный пользователь

    С нами с:
    13 май 2017
    Сообщения:
    224
    Симпатии:
    18
    Но ты ж не сразу с двух инпутов фокус теряешь.
     
  8. winsok

    winsok Активный пользователь

    С нами с:
    13 сен 2016
    Сообщения:
    82
    Симпатии:
    1
    Когда у любого фокус пропадает запускается функция. Разве что там проверка емаила. Но почему то работает только у первого элемента.
     
  9. gruth

    gruth Активный пользователь

    С нами с:
    13 май 2017
    Сообщения:
    224
    Симпатии:
    18
    Так у тебя темп больше 1 не наберёт..
     
  10. winsok

    winsok Активный пользователь

    С нами с:
    13 сен 2016
    Сообщения:
    82
    Симпатии:
    1
    так больше 1 и не надо) 1 и должно быть, только когда поле емаил заполнено правильно, когда не заполнено или заполнено с ошибками то 0
     
  11. gruth

    gruth Активный пользователь

    С нами с:
    13 май 2017
    Сообщения:
    224
    Симпатии:
    18
    Так, 1 если емайл правильный? А если номер сначала введу?
     
  12. winsok

    winsok Активный пользователь

    С нами с:
    13 сен 2016
    Сообщения:
    82
    Симпатии:
    1
    на эмайле потом сработает)
     
  13. gruth

    gruth Активный пользователь

    С нами с:
    13 май 2017
    Сообщения:
    224
    Симпатии:
    18
    Кароч план такой. Темп тебе ни как не поможет. Делай 2 флага, оба фолс. Не думай что первым будут заполнять. Отработал фокус, смотри элемент этот на ошибки, если есть ошибки ставь одному из флагов фолс иначе тру. Все в этой же функции смотришь если (флаг1 && флаг2)
    То есть оба тру, убираешь хидден иначе ставишь хидден. Научись мыслить пошагово
     
  14. winsok

    winsok Активный пользователь

    С нами с:
    13 сен 2016
    Сообщения:
    82
    Симпатии:
    1
    Так?
    Код (Javascript):
    1. $('.item').blur(function() {
    2.     var mail = false, phone = false;
    3.     if ($('#userMail input').val() != '') {
    4.         if ($(this).attr('id') == 'userMail') {
    5.             var pattern = /^([a-z0-9_\.-])+@[a-z0-9-]+\.([a-z]{2,4}\.)?[a-z]{2,4}$/i;
    6.             if (pattern.test($(this).val())) {
    7.                 mail = true;
    8.                 $('#userMail .error').text('');
    9.             } else {
    10.                 mail = false
    11.                 $('#userMail .error').text('Введите правильный адрес электронной почты');
    12.             }
    13.         }
    14.     }
    15.     if ($('#userPhone input').val() != '') {
    16.         phone = true;
    17.     }
    18.     if (mail && phone) {
    19.         $('.save').removeClass('hidden');
    20.     } else {
    21.         $('.save').addClass('hidden');
    22.     }
    23. })
     
  15. gruth

    gruth Активный пользователь

    С нами с:
    13 май 2017
    Сообщения:
    224
    Симпатии:
    18
    Нет, элемент потерял фокус, тебе пришел this. Сначала смотришь если this.value.trim() == '' ставишь фолс
    Ща
    Итак для начала что б по красоте было немного поменяем логику. Ты ведь представляешь что такое объект в js?!
    Что бы меньше двигаться сделаем флаги в объекте.
    Код (Javascript):
    1. {
    2.   userMail: false,
    3.   userPhone: false
    4. }
    теперь сам обработчик
    Код (Text):
    1.  
    2. var obj = {
    3.   userMail: false,
    4.   userPhone: false
    5. };
    6.  
    7. $('.item').blur(function() {
    8.   if (this.value.trim() == '')
    9.   obj[this.id] = false;
    10.   else {
    11.   //доделывай
    12.   }
    13.   //и тут не забудь
    14. });
     
    #15 gruth, 5 апр 2018
    Последнее редактирование: 5 апр 2018
    winsok нравится это.
  16. gruth

    gruth Активный пользователь

    С нами с:
    13 май 2017
    Сообщения:
    224
    Симпатии:
    18
    сюда не забудь скинуть готовый вариант)