Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.01.2017, 23:29
Аватар для skwz
Новичок на форуме
Отправить личное сообщение для skwz Посмотреть профиль Найти все сообщения от skwz
 
Регистрация: 03.01.2017
Сообщений: 8

Добавлять class в div при вводе текста в input
Всем привет!

Помогите пожалуйста сделать, заранее очень сильно благодарен вам!

Вводим в input, слово start.

это слово добавляется как class в div с уже фиксированным class'ом SOS.

<div class="SOS start">текст</div>


Не прерывая сеанса, если вписать слово stop, то второй класс меняется на:
<div class="SOS stop">текст</div>


если вписать слово status, то второй класс меняется на:
<div class="SOS status">текст</div>


Ну и добить проверкой, чтобы слова start, stop, status заранее были вписаны в скрипт js чтобы он их добавлял, тобишь если написать слово prostotext или какое либо другое которого нет в списке на проверку, скрипт будет вставлять class под именем error
<div class="SOS error">текст</div>


Кому не трудно, у кого есть пару минут свободного времени, помогите пожалуйста, буду очень благодарен и +1000 к карме.
Ответить с цитированием
  #2 (permalink)  
Старый 04.01.2017, 08:26
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

<div class="sos">CSS is awesome. I &hearts; JS</div>
<input class="sos" id="my-field" type="text" autofocus placeholder="Введи stop, start...">
<style>
	.sos {
		--x-color: var(--color, black);
		padding: 1em;
		margin: 1em;
		border-radius: .4em;
		font-weight: bold;
		outline: 0;
		border: .2em solid var(--x-color);
		color: var(--x-color);
		transition: 1s;
	}
	
	.sos:hover {
		box-shadow: inset 0 0 0 3em var(--x-color);
		color: white;
	}
	
	.sos.start {
		--color: #52cc11;
	}
	
	.sos.stop {
		--color: #cc112e;
	}
	
	.sos.status {
		--color: #11cc92;
	}
	
	.sos.error {
		--color: #c4bfb1;
	}
</style>
<script>
{
	let classNamesRE = /^(start|stop|status)$/;
	let input = document.getElementById("my-field");
	let div = document.querySelector(".sos");
	
	let onInputHandler = event => {
		let match = event.target.value.match(classNamesRE);

		if(!match) match = ["", "error"];

		event.target.className = div.className = ["sos", match[1]].join(" "); 
	};

	input.addEventListener("input", onInputHandler);
};
</script>


Для изменения цвета используются пользовательские CSS-свойства, которые позволяют значительно сократить код. Этот пример использует переменные таким образом, которым вы не можете действительно сделать с Sass.
Ответить с цитированием
  #3 (permalink)  
Старый 04.01.2017, 10:13
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Malleys,
а если так ...
{
  let classNamesRE = /^(?:start|stop|status)$/;
  let input = document.getElementById("my-field");
  let div = document.querySelector(".sos");

  let onInputHandler = event => {
    let match = event.target.value.match(classNamesRE)||"error";
    event.target.className = div.className = "sos " + match;
  };

  input.addEventListener("input", onInputHandler);
};


и не могли бы вы на пальцах обьяснить, для тех кто не в танке фразу
Цитата:
Этот пример использует переменные таким образом, которым вы не можете действительно сделать с Sass.
Ответить с цитированием
  #4 (permalink)  
Старый 04.01.2017, 23:46
Аватар для skwz
Новичок на форуме
Отправить личное сообщение для skwz Посмотреть профиль Найти все сообщения от skwz
 
Регистрация: 03.01.2017
Сообщений: 8

Работает, спасибо ребят!
Есть 1 нюанс который хотелось бы исправить и про который я наверное забыл сказать ранее, подскажите пожалуйста как сделать чтобы class'ы добавлялись не моментально при вводе текста, а при нажатии на enter
Ответить с цитированием
  #5 (permalink)  
Старый 05.01.2017, 00:22
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

skwz,
{
  let classNamesRE = /^(?:start|stop|status)$/;
  let input = document.getElementById("my-field");
  let div = document.querySelector(".sos");

  let onInputHandler = event => {
    let match = (event.code === "Enter" && event.target.value.match(classNamesRE))||"error";
    event.target.className = div.className = "sos " + match;
  };

  input.addEventListener("keyup", onInputHandler);
};

Последний раз редактировалось рони, 05.01.2017 в 00:25.
Ответить с цитированием
  #6 (permalink)  
Старый 05.01.2017, 01:37
Аватар для skwz
Новичок на форуме
Отправить личное сообщение для skwz Посмотреть профиль Найти все сообщения от skwz
 
Регистрация: 03.01.2017
Сообщений: 8

Прям как нужно спасибо) только хотелось бы еще чтобы class error тоже по нажатию на Enter срабатывал, если стирать текст с поля, то class error тоже по сути должен удаляться. И тогда получится то что я и хотел
Ответить с цитированием
  #7 (permalink)  
Старый 05.01.2017, 01:51
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

skwz,
{
  let classNamesRE = /^(?:start|stop|status)$/;
  let input = document.getElementById("my-field");
  let div = document.querySelector(".sos");

  let onInputHandler = event => {
    let val = event.target.value.trim();
    let match = event.code === "Enter" && val ? (val.match(classNamesRE)||"error") : "";
    event.target.className = div.className = "sos " + match;
  };

  input.addEventListener("keyup", onInputHandler);
};
Ответить с цитированием
  #8 (permalink)  
Старый 05.01.2017, 05:33
Аватар для skwz
Новичок на форуме
Отправить личное сообщение для skwz Посмотреть профиль Найти все сообщения от skwz
 
Регистрация: 03.01.2017
Сообщений: 8

рони, спасибо, вы меня очень выручили
Ответить с цитированием
  #9 (permalink)  
Старый 05.01.2017, 23:18
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от рони Посмотреть сообщение
и не могли бы вы на пальцах объяснить, для тех кто не в танке фразу
Переменные созданные в Sass, после компиляции браузер ничего не знает о них. Соответственно их невозможно менять в браузере.
Ответить с цитированием
  #10 (permalink)  
Старый 06.01.2017, 00:10
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Malleys,
Спасибо огромное!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как при изменении div class выполнять анимацию у дочерних элементов? Aleksanderj Элементы интерфейса 6 10.09.2015 18:49
Новый input при выборе определенного option SLameN Элементы интерфейса 4 03.07.2015 16:29
При нажатии на ссылку раскрываются все div anonimous jQuery 1 09.08.2012 14:49
Как проигнорировать определенные символы при вводе в поле input? nraw Events/DOM/Window 6 24.07.2012 17:17
Firefox: перехватить соббытие при перетаскивании текста no_alex Общие вопросы Javascript 9 21.08.2008 18:02