powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / jQuery removeClass
11 сообщений из 11, страница 1 из 1
jQuery removeClass
    #36331031
ejnadall
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, приветствую!
Я в ступоре.
Код следующий:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
html
<div class="test1">test1</div>

====
js
$(".test1").click(				
   $(this).removeClass("test1");					
   $(this).addClass("test2");	
   alert ($(this).attr("class"));					
)

При клике на div выхеривается класс test1 и вместо него подставляется класс test2 (о чем я вижу по alert "test2") и казалось бы при следующем клике на div ничего не должно произойти. Ан нет! Алерт опять же появляется... с классом test2 .
С toggleClass та же трабла...
Т.е. такое впечатление, что он как-то "не до конца" удаляется... В чем соль? :)
Правильно ли я понимаю, что $(".test1").click не должен уже допускать срабатывания события?
...
Рейтинг: 0 / 0
jQuery removeClass
    #36332014
luchik_5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
но ведь вы не меняете класс при повторном клике, почему вы считаете что должен быть какой-то другой класс, а не test2?
...
Рейтинг: 0 / 0
jQuery removeClass
    #36332028
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я до конца не разбирался с методами работы с классами, но то, что там не все чисто, это точно. Вернее, наоборот - все очень стуктуризированно и логично, а мы валим все в одно кучу.

Насколько знаю, обращаться к атрибуту class надо через .attr("className"), который, насколько помню, динамической сменой класса не меняется. Чтобы избежать путаниц, всегда использую назначение классов путем .attr("className", ...).

А что касается вызова события, то ты не прав: конструкция $(".test1") ищет элемент и затем назначает ему событие и пока данный элемент "жив", событие назначено, вне зависимости от его класса или других параметров. Другое дело, что можно отписаться от события либо путем bind/unbind, либо если событие планируется использовать один раз, то назначить через one.
...
Рейтинг: 0 / 0
jQuery removeClass
    #36332549
ejnadall
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
luchik_5но ведь вы не меняете класс при повторном клике, почему вы считаете что должен быть какой-то другой класс, а не test2?

:) в том то и "прикол". Alert при втором клике пишет "test2", но вопрос - почему срабатывает alert? Alert должен сработать только если class = test1!
...
Рейтинг: 0 / 0
jQuery removeClass
    #36332614
luchik_5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы подцепили событие для элемента с классом "test1", как написал IDVsbruck, это событие будет привязано к элементу до тех пор, пока он "жив". При смене класса событие для этого элемента остается!
...
Рейтинг: 0 / 0
jQuery removeClass
    #36332638
ejnadall
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
luchik_5,
Вы подцепили событие для элемента с классом "test1", как написал IDVsbruck, это событие будет привязано к элементу до тех пор, пока он "жив". При смене класса событие для этого элемента остается!

Риал сакс! Я круто обломался! :)
ИМХО, когда команда называется remove то это должен быть реальный remove. В нашем же случае "курсор" на объект остается, удаляется лишь "видимая" строна... Тут какой-нить тогда clean надо было делать или еще какой синоним...
PS: и главное в run-time дебагге мы ж видим, что объект уже сменил свой класс, казалось бы...
Будем делать тогда "костыли"...

Ниже текст был написан до вашего поста...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<div class="test0">xxx</div>

$(".test0").click(
	function(){
		$(this).removeClass("test0");  // класс удаляется <div class="">xxx</div>
		$(this).attr("className", "test1"); // // класс присваивается <div class="test1">xxx</div>
	}
);
		
$(".test1").click(
	function(){
		alert ("OK!");
	}
);

Сейчас попробывал промониторить исполнение кода... В коментариях видно поведение.
При первом клике на div обработка идет по ветке $(".test0").click Команды исполняются... Класс становится test1 и при повторном клике я ожидаю, что обработка пойдет по ветке $(".test1").click , но при втором клике обработка идет опять же по ветке $(".test0").click , имея при этом class = test1!
Есть у меня подозрение, что селектор класса $(.class) работает исходя из первоначального класса, а не динамически присвоенного, что не есть гутт.
Посмотрите, плз, кто сможет, так ли работает у вас?
...
Рейтинг: 0 / 0
jQuery removeClass
    #36332714
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ejnadall, вы подцепили событие конкретным элементам, которые, по воле случая, в момент подцепления имели класс test1. То что потом этот класс был с них убран не меняет того, что к ним подцеплены события. Вы подцепили события не к "элементам, которые в момент события <будут иметь> test1", а всего лишь к "элементам, которые в момент подцепления <имели> класс test1".
...
Рейтинг: 0 / 0
jQuery removeClass
    #36332721
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<div class="test0 test1" id="test2">test</div>
<script type="text/javascript">
$('.test0').click(
	function(){
		alert('1');
	}
);
$('.test1').click(
	function(){
		alert('2');
	}
);
$('#test2').removeClass('test0').removeClass('test1');
</script>
...
Рейтинг: 0 / 0
jQuery removeClass
    #36332813
GWhite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ejnadallКоллеги, приветствую!
При клике на div выхеривается класс test1 и вместо него подставляется класс test2 (о чем я вижу по alert "test2") и казалось бы при следующем клике на div ничего не должно произойти. Ан нет! Алерт опять же появляется... с классом test2 .
С toggleClass та же трабла...
Т.е. такое впечатление, что он как-то "не до конца" удаляется... В чем соль? :)
Правильно ли я понимаю, что $(".test1").click не должен уже допускать срабатывания события?

С утра грустно было, почитал, настроение улучшилось ).
...
Рейтинг: 0 / 0
jQuery removeClass
    #36332991
ejnadall
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ушел от проблемы путем ввода нового доп.атрибута. Меняю не значение класса, а значение этого произв.атрибута и уже внутри события анализирую его значение.

GWhite
С утра грустно было, почитал, настроение улучшилось ).

Ну так-то нооо... :) Рад что Вам помог.
...
Рейтинг: 0 / 0
jQuery removeClass
    #36333521
GWhite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пожет просто
Код: plaintext
$(this).unbind("click");

внутри обработчика?
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / jQuery removeClass
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]