Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 20.02.2018, 22:43
Профессор
Отправить личное сообщение для the_little Посмотреть профиль Найти все сообщения от the_little
 
Регистрация: 25.09.2017
Сообщений: 186

Сообщение от j0hnik Посмотреть сообщение

вместо класса можно использовать любые другие доступные атрибуты.
вот это круть. Спасибо огромное!

понял. теперь и фильтруют только инпуты с нужными классами и текстовые вставки делаются в зависимости от класса.
Ответить с цитированием
  #22 (permalink)  
Старый 21.02.2018, 08:48
Профессор
Отправить личное сообщение для the_little Посмотреть профиль Найти все сообщения от the_little
 
Регистрация: 25.09.2017
Сообщений: 186

Помогите пожалуйста.

Вставил скрипт и инпуты на сайт. Работают как надо.
Но потом увидел, что в форме ниже при нажатии на плюс или минус срабатывает проверка на правильность заполнения полей. И все загорается красным (потому что еще не заполнено.

Если я убираю скрипт, который за это отвечает - то перестает работать инпут новый. На плюс нажимаю, +1 происходит, и потом возвращается обратно на 0.

Что не так делаю?

// Example starter JavaScript for disabling form submissions if there are invalid fields
    (function() {
      'use strict';
      window.addEventListener('load', function() {
        // Fetch all the forms we want to apply custom Bootstrap validation styles to
        var forms = document.getElementsByClassName('needs-validation');
        // Loop over them and prevent submission
        var validation = Array.prototype.filter.call(forms, function(form) {
          form.addEventListener('submit', function(event) {
            if (form.checkValidity() === false) {
              event.preventDefault();
              event.stopPropagation();
            }
            form.classList.add('was-validated');
          }, false);
        });
      }, false);
    })();


    var sklon = (n, obj) => n+" "+obj[(n%100>4 && n%100<20)?2:[2, 0, 1, 1, 1, 2][(n%10<5)?n%10:5]];

  		var obj = {kom:['комната', 'комнаты', 'комнат'],
  							san:['санузел', 'санузла', 'санузлов'],
  							chas:['час', 'часа', 'часов']},
  		inp = document.querySelectorAll('.san, .kom, .chas');
  		inp.forEach((el, i)=>{
  			el.value = 0;
  			var val, cl = el.className;
  			el.previousElementSibling.onclick = e => {
  				val = parseInt(el.value);
  				if (val > 0) val--;
  				el.value = sklon(val, obj[cl]);
  			};
  			el.nextElementSibling.onclick = e => {
  				val = parseInt(el.value);
  				val++;
  				el.value = sklon(val, obj[cl]);
  			};
  			el.onchange = e => {
  				val = parseInt(el.value);
  				e.target.value = sklon(val, obj[cl]);
  			};
  		});

Последний раз редактировалось the_little, 21.02.2018 в 08:51.
Ответить с цитированием
  #23 (permalink)  
Старый 21.02.2018, 11:01
Профессор
Отправить личное сообщение для the_little Посмотреть профиль Найти все сообщения от the_little
 
Регистрация: 25.09.2017
Сообщений: 186

А как в этих инпутах отслеживать изменения и получать из них значения.

я попробовал в инпуте прописать onchange="alert(this.value)", но он никак не реагирует на изменения в инпуте.
Ответить с цитированием
  #24 (permalink)  
Старый 21.02.2018, 11:20
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от the_little
я попробовал в инпуте прописать onchange="alert(this.value)", но он никак не реагирует на изменения в инпуте.
Дело в том, что onchange наступает после потери фокуса на твоем инпуте. Т.е. нужно "покинуть" поле, тогда сработает событие.
Ответить с цитированием
  #25 (permalink)  
Старый 21.02.2018, 11:51
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

the_little,
Обработчик события change уже прописан в вашем скрипте - строки 40-43 в примере пост№22.
Так что не надо ничего вписывать в инпут - вписывайте в этот обработчик.
Там и значение уже есть.
Ответить с цитированием
  #26 (permalink)  
Старый 21.02.2018, 11:55
Профессор
Отправить личное сообщение для the_little Посмотреть профиль Найти все сообщения от the_little
 
Регистрация: 25.09.2017
Сообщений: 186

Сообщение от Dilettante_Pro Посмотреть сообщение
the_little,
Обработчик события change уже прописан в вашем скрипте - строки 40-43 в примере пост№22.
Так что не надо ничего вписывать в инпут - вписывайте в этот обработчик.
Там и значение уже есть.
В инпут я вписывал для проверки.
У меня каждый инпут имеет свой id.
И я пытался получить для одного значение val, но ничего не получалось.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
2 блока "отрыть полностью" polepropilen Элементы интерфейса 7 22.06.2018 23:53
При клике ссылки, открыть DIV блок, и при клике ещё раз, закрыть его Simon Общие вопросы Javascript 59 28.05.2017 17:31
Исполнять скрипт только для текущего элемента snovapavel jQuery 19 10.03.2015 13:22
проблема со scroll Chrome Элементы интерфейса 2 21.10.2013 14:46
Отследить клик по дочернему объекту AllanZ jQuery 3 05.09.2012 12:38