Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   установка и сброс классов (https://javascript.ru/forum/jquery/42914-ustanovka-i-sbros-klassov.html)

Prowler 13.11.2013 21:26

установка и сброс классов
 
Доброго времени суток.
Вопрос, пожалуй, детский:
есть много-много элементов div. По щелчку на элементе его стиль меняется. Нужно чтобы по щелчку по другому div с предыдущего стиль снимался. Ну, другими словами надо уникально, визуально выделять текущий див(по которому щелкнул пользователь.
Делал с помощью .each снимая стили со всех, потом устанавливая. Но думаю это самый плохой способ какой можно придумать.
Сейчас так:
$(document).ready(function() {
var $obj;
$('div').click(function() {
        $obj.toggleClass('selectedcell');
   	$obj = $(this);
	$obj.toggleClass('selectedcell');
  });

});


не работает, наверно, потому что изначально не инициализирована переменная obj, что вызывает ошибку...
В общем, прошу помощи.

Faab 13.11.2013 21:38

<script>
$(document).ready(function() {
$('.allDivs').click(function() {
    $('.allDivs').removeClass('active');
    $(this).addClass('active');
  });
});
</script>


Тут всем дивам нужно дать класс allDivs

Prowler 13.11.2013 21:53

Faab,
Спасибо за быстрый ответ. Ну, в общем то это подходит. Мало практики, наверно, поэтому сам не догадался.

Но, вот для практики интересует вопрос, приближенный к изначальной постановке задачи: в пределах onclick можно ли как-нибудь сохранить манипулируемый объект, а при след. нажатии вернуть ему исходное состояние. Т.е. ему одному?
Еще раз спасибо за ответ.

Rise 13.11.2013 22:32

Да, можно передовать данные в обработчик:
<script>
$(document).ready(function() {
	$('.allDivs').click({prev: 0}, function(e) {
		if (e.data.prev) e.data.prev.removeClass('active');
		e.data.prev = $(this);
		$(this).addClass('active');
	});
});
</script>

Prowler 13.11.2013 22:47

Rise,
хм, не подскажите где можно почитать о передаче параметров в функцию click, желательно, на русском? В описании на jquery-docs обработчик принимает только одно значение - функцию. Не могу понять в приведенном примере передачу карты...
Может будущим поколениям, что читать это будут пригодится: в код, приведенный мной в первом посте:

$(document).ready(function() {
var $obj;
$('div').click(function() {
    $obj.toggleClass('selectedcell');
    $obj = $(this);
    $obj.toggleClass('selectedcell');
  });
$obj=$('div:first');
$obj.toggleClass('selectedcell');
});

Костыль, конечно, но работает :-D

Rise 13.11.2013 23:24

Обработчик или источник события click


Часовой пояс GMT +3, время: 16:49.