Javascript.RU

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

Изменение определенного класа в зависимости от другого
Добрый день. Требуется совет.

Верстаю тренировочный сайтик:

http://projects.wkornilow.org.ua/sommelier/

Суть такова. Есть первый блок "Бокал". В зависимости от типа бокала в следующем блоке "Тип" выбирается соответствующее значение "Аперетив, диджестив" и так далее.

Так вот собственно вопрос. Каким образом можно реализовать функционал, чтобы в зависимости от выбранного типа бокала менялись (например выделялся один пункт з списка, а остальные становились неактивными).

Прошу натолкните на путь истинный)
Ответить с цитированием
  #2 (permalink)  
Старый 21.11.2013, 17:35
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

Я бы делал так:
var glasses = [
{
aperitif = true,
hot = true,
milk = false
},{
aperitif = true,
hot = false,
milk = true
}];

now - получаете индекс текущего бокала
glasses[now] - получите свойства для этого бокала, проходитесь по ним и проставляете классы для элементов в списках других блоков.
Ответить с цитированием
  #3 (permalink)  
Старый 21.11.2013, 17:59
Аватар для jsru_
Кандидат Javascript-наук
Отправить личное сообщение для jsru_ Посмотреть профиль Найти все сообщения от jsru_
 
Регистрация: 09.04.2013
Сообщений: 149

Сообщение от BETEPAH Посмотреть сообщение
Я бы делал так:
var glasses = [
{
aperitif = true,
hot = true,
milk = false
},{
aperitif = true,
hot = false,
milk = true
}];

now - получаете индекс текущего бокала
glasses[now] - получите свойства для этого бокала, проходитесь по ним и проставляете классы для элементов в списках других блоков.
что-то как-то затратно, тут обычное делегирование, кликаем по ul у всех li проставляем disabled кроме eventtarget

Последний раз редактировалось jsru_, 21.11.2013 в 18:13.
Ответить с цитированием
  #4 (permalink)  
Старый 21.11.2013, 18:12
Новичок на форуме
Отправить личное сообщение для wkornilow Посмотреть профиль Найти все сообщения от wkornilow
 
Регистрация: 21.11.2013
Сообщений: 8

Мне бы были интересны разные варианты, так как только начинаю экспериментировать с JS после прочтения учебника.
Ответить с цитированием
  #5 (permalink)  
Старый 21.11.2013, 19:57
Новичок на форуме
Отправить личное сообщение для wkornilow Посмотреть профиль Найти все сообщения от wkornilow
 
Регистрация: 21.11.2013
Сообщений: 8

Также интересует вопрос, как определить какой именно в данный момент показывает слайдер.
Ответить с цитированием
  #6 (permalink)  
Старый 21.11.2013, 22:11
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

Сообщение от jsru_
кликаем по ul у всех li проставляем disabled кроме eventtarget
вы ссылку смотрели? При чем здесь делегирование? Требуется в зависимости от выбранного бокала раскрасить черным и серым пункты в других блоках. Где вы собираетесь хранить данные, какие блоки красить серым для каждого из 18ти бокалов?
Сообщение от wkornilow
Также интересует вопрос, как определить какой именно в данный момент показывает слайдер.
Определять не надо. В начальный момент индекс бокала равен, допустим, нулю. Он соответствует первому бокалу. Когда кликаете на контроллер слайдера, меняете этот индекс на 1 в строну уменьшения или увеличения. И всегда имеете текущий индекс.
Ответить с цитированием
  #7 (permalink)  
Старый 23.11.2013, 00:26
Новичок на форуме
Отправить личное сообщение для wkornilow Посмотреть профиль Найти все сообщения от wkornilow
 
Регистрация: 21.11.2013
Сообщений: 8

Сообщение от BETEPAH Посмотреть сообщение
Когда кликаете на контроллер слайдера, меняете этот индекс на 1 в строну уменьшения или увеличения. И всегда имеете текущий индекс.
Вопрос, как мне определить у какого именно <li> менять класс?
Ответить с цитированием
  #8 (permalink)  
Старый 23.11.2013, 01:24
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

Сообщение от wkornilow
Вопрос, как мне определить у какого именно <li> менять класс?
проставить у них ID соответствующее свойству.
<style>
ul {
	display: inline-block;
	width: 200px;
}
.that {
	font-weight: bold;
}
.active {
	color: #333;
}
.unactive {
	color: #aaa;
}
</style>
<input type="button" id="change" value="сменить набор" /> <br />
<ul id="sets">
	<li class="that">первый бокал</li>
	<li>второй бокал</li>
	<li>третий бокал</li>
</ul>
<ul id="ingradients">
	<li id="aperitif" class="active">аперитив</li>
	<li id="hot" class="active">горячее</li>
	<li id="milk" class="unactive">молоко</li>
</ul>

<script>
var glasses = [
	{
		aperitif : true,
		hot : true,
		milk : false
	},{
		aperitif : true,
		hot : false,
		milk : true
	},{
		aperitif : false,
		hot : true,
		milk : false
	}
];
var now = 0;
document.getElementById('change').onclick = function() {
	if (++now > glasses.length -1) now = 0;
	document.getElementsByClassName('that')[0].className = '';
	document.getElementById('sets').getElementsByTagName('li')[now].className = 'that';
	var set = glasses[now];
	for (var key in set) {
		document.getElementById(key).className = (set[key] === true) ? 'active': 'unactive';
	}
}
</script>
Ответить с цитированием
  #9 (permalink)  
Старый 25.11.2013, 16:07
Новичок на форуме
Отправить личное сообщение для wkornilow Посмотреть профиль Найти все сообщения от wkornilow
 
Регистрация: 21.11.2013
Сообщений: 8

BETEPAH, спасибо за помощь. С этим все понятно.

Но все равно есть несколько вопрос (тапком прошу не бить).
Вопрос 1:

Выношу скрипт в отдельный *.js файл и подключаю его в header. При этом скрипт не работает. Я так понимаю что для правильной работы скрипта необходимо использовать window.onload. Я прав? Если нет, как добиться чтобы скрипт который я вынес в отдельный файл работал.

Вопрос 2:
Если вы переходили по ссылке, которую я размещал в 1 сообщении, там видно что есть 4 списка:
1) Тип бокала
2) Тип напитка
3) Количество градусов
4) Основа напитка

В зависимости от выбранного бокала соответственно меняется 2, 3, 4 список.

В приведенном Вами выше коде меняется только второй список.
Насколько я понимаю сделать зависимость также для 3 и 4 списка, можно добавив в массив вложенные массивы, например так:

var glasses = [
    {
        apperetive: true[{
            nonalcohol: false,
            lowdegree: true,
            middledegree: false,
            highdegree: true
        }],
        didjestive: false,
        hot: false,
        milk: false,
        desert: false,
        sloistie: false,
        deizi: false,
        dzuleti: false
    },
    {
        apperetive: false,
        didjestive: false,
        hot: false,
        milk: true,
        desert: false,
        sloistie: false,
        deizi: false,
        dzuleti: false
    },
    {
        apperetive: false,
        didjestive: false,
        hot: false,
        milk: false,
        desert: false,
        sloistie: false,
        deizi: false,
        dzuleti: true
    }

];


Скажите, так правильно реализовывать, или есть иной способ?

Последний раз редактировалось wkornilow, 25.11.2013 в 16:10.
Ответить с цитированием
  #10 (permalink)  
Старый 25.11.2013, 18:48
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

Сообщение от wkornilow
В зависимости от выбранного бокала соответственно меняется 2, 3, 4 список.
нет необходимости делать вложенные массивы. Просто внесите классы 3го и 4го списка туда же, куда внесли классы 2го списка.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическое изменение ширины в зависимости от содержимого iNfantry Events/DOM/Window 38 24.07.2017 19:38
Изменение цвета ссылки в зависимости от ее адреса theVid jQuery 1 06.10.2012 19:56
Изменение изображения на кнопке в зависимости от текущего url Loiso Элементы интерфейса 4 23.08.2011 09:23
Изменение стиля определенного участка текста в textarea Morlak Элементы интерфейса 2 24.04.2011 18:08
Как в общем меню для всех страниц поменять класс определенного пункта в зависимости о phenom Элементы интерфейса 2 08.04.2011 11:09