Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Не пойму результат classlist.contains (https://javascript.ru/forum/events/81955-ne-pojjmu-rezultat-classlist-contains.html)

Storm03 20.02.2021 10:56

Не пойму результат classlist.contains
 
На странице сайта открывается блок с описанием. Решил добавить плавности и сделал проверку, открыт блок или нет.
Проблема в том, что когда блок открыт, понятно, что у него добавлен класс "_open". Но js (первый алерт) выдаёт, будто у него класс "_close". Хотя второй показывает, что "_open". В html-е задан класс "_close".
function description_show() {
	oll_frames_close();
	var t = 0;
	let c = document.getElementById("page_description"); alert(c.classList);
	if (c.classList.contains("page_description_open")) {
		c.classList.remove("page_description_open"), c.classList.add("page_description_close");
		t = 500;
	}
	let e = document.getElementById("description_body");
	var a = this.getAttribute("data-id");
	var d = new XMLHttpRequest;
	a = "id=" + a;
	d.open("POST", "service/xxxxxxxx.php", !0);
	d.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	d.addEventListener("readystatechange", function () {
		if (4 === d.readyState && 200 === d.status) {
			setTimeout(function () {
				e.innerHTML = d.responseText;
				c.classList.remove("page_description_close"), c.classList.add("page_description_open"); alert(c.classList);
			}, t);
		}
	});
	d.send(a);
}

рони 20.02.2021 11:11

Цитата:

Сообщение от Storm03
Но js (первый алерт) выдаёт, будто у него класс "_close".

Цитата:

Сообщение от Storm03
В html-е задан класс "_close".

что не так?

Storm03 20.02.2021 11:12

А!!! Я ТУПОЙ!!!!!!
В самом начале стоит вызов oll_frames_close();, Который и закрывает все окна!!! Ну, блин.... слов нет!!!
Правильно вот так:
var t = 0;
	let c = document.getElementById("page_description");
	if (c.classList.contains("page_description_open")) t = 500;
	oll_frames_close();

Storm03 20.02.2021 11:13

Цитата:

Сообщение от рони (Сообщение 533928)
что не так?

Так ведь после первого срабатывания класс меняется на "_open".

рони 20.02.2021 11:48

Цитата:

Сообщение от Storm03
Так ведь после первого срабатывания класс меняется на "_open".

значит вы что-то не договорили изначально.

Storm03 20.02.2021 12:41

Да, извините. Как обычно: "АААА! Всё пропало, ничего не работает", мысли путаются, правильно задать вопрос не получается)))


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