Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.04.2020, 01:46
Аватар для nastya97core
Аспирант
Отправить личное сообщение для nastya97core Посмотреть профиль Найти все сообщения от nastya97core
 
Регистрация: 04.04.2020
Сообщений: 60

Как сделать onFocus, если объектов несколько?
Здравствуйте. Есть вот такое на jquery
$(".form-input").focus(function() {
  $(this).siblings('label').addClass('active');
});
$(".form-input").focusout(function() {
  if ($(this).val() != false) {
    $(this).siblings('label').addClass('active');
  } else {
    $(this).siblings('label').removeClass('active');
  }
});

Оно работает, как часы, но мне надо на чистом JavaScript. Я написала это, но оно работает только с первым элементом. Form-input у меня несколько.
function q(e){return document.querySelector(e);}
q(".form-input").onfocus = function() {
	this.nextElementSibling.classList.add("active");
};

q(".form-input").onblur = function() {
	if (this.value != false) {
		this.nextElementSibling.classList.add("active");
	} else {
		this.nextElementSibling.classList.remove("active");
	}
};


подскажите, как сделать, чтобы класс добавлялся ко всем нажимаемым элементам

Последний раз редактировалось nastya97core, 29.04.2020 в 02:06.
Ответить с цитированием
  #2 (permalink)  
Старый 29.04.2020, 07:53
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,751

document.querySelectorAll(".form-input").forEach(
	el => { el.onfocus = function() {
					this.nextElementSibling.classList.add("active");
				};
				
			el.onblur = function() {
				if (this.value != false) {
					this.nextElementSibling.classList.add("active");
				} else {
					this.nextElementSibling.classList.remove("active");
				}
			}

		}
);
Ответить с цитированием
  #3 (permalink)  
Старый 29.04.2020, 08:05
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

voraa, а если 7-11 заменить на classList.toggle ?
Ответить с цитированием
  #4 (permalink)  
Старый 29.04.2020, 08:22
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,751

Сообщение от laimas Посмотреть сообщение
voraa, а если 7-11 заменить на classList.toggle ?
И что в этом хорошего?
Там же добавление/удаление класса у следующего элемента идет не в зависимости от его наличия, а в зависимости от значения текущего элемента.
Ответить с цитированием
  #5 (permalink)  
Старый 29.04.2020, 09:06
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,129

Сообщение от voraa
И что в этом хорошего?
наличие параметра Boolean
Ответить с цитированием
  #6 (permalink)  
Старый 29.04.2020, 10:04
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от voraa
Там же добавление/удаление класса у следующего элемента идет
Так 7-11, это как раз и есть "механизм" toggle
Ответить с цитированием
  #7 (permalink)  
Старый 29.04.2020, 12:17
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,751

Сообщение от laimas Посмотреть сообщение
Так 7-11, это как раз и есть "механизм" toggle
Забыл про эту возможность, т.к. никогда ей не пользовался (и не буду)
По мне toggle должна делать toggle, а для add и remove есть другие функции.
Так код понятнее
Ответить с цитированием
  #8 (permalink)  
Старый 29.04.2020, 12:21
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от voraa
Так код понятнее
А что непонятного в случае toggle, если знать ее возможности? Это как ну его нафик for, я буду так:

a += b + c
a += b + c
a += b + c
....

сколько нужно, это понятнее.
Ответить с цитированием
  #9 (permalink)  
Старый 29.04.2020, 12:48
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,751

Есть функция функция appendChild(node), а чего бы ей не прикрутили еще один параметр, что бы она могла удалять элемент?
а.appendChild(b) - добавляет элемент
а.appendChild(b, false) - удаляет элемент
Удобно же.
Ответить с цитированием
  #10 (permalink)  
Старый 29.04.2020, 12:55
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Удобно, только имя функции в данном случае иное было бы как минимум.

Не всегда используют тернарный оператор тоже ссылаясь на "непонятки". А чего в нем непонятного, все просто и лаконично.

Это уже привередливость, а не доводы. А если не хочется и ладно, но ведь и борщ не обязательно любят все, но это не значит, что он как блюдо не имеет право на существование.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать несколько кликов на кнопку? VaytonJS Javascript под браузер 1 19.11.2018 08:01
как сделать чтобы скрипт не спотыкался если какой то элемент не находит на странице? денис77447327 Общие вопросы Javascript 1 04.10.2017 17:10
Как сделать несколько условий в цикле Navigator Элементы интерфейса 12 02.08.2017 13:59
Как сделать так чтоб если в инпут ввести процент от 1 до 100, то... Влад Громов Общие вопросы Javascript 13 21.12.2014 17:03
Как сделать несколько полей подсказок для слайдера DaniBeiss Events/DOM/Window 1 23.06.2012 16:49