[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблемы в DOM
VeRTak

if($.cookie('remember'))
{
navMenu("profile");
$("a.link-logout").on("click", function () {
$.cookie('remember', null, { expires: -1 } );
$(".link-profile").attr("class", "link-signIn");
$(".link-logout").attr("class", "link-signUp");
});
}
else
{
sing(".link-signUp");
sing(".link-signIn");
}


Суть проблемы такова, при клике удаляется кука и меняется класс у ссылки. От того какой класс, далее у меня по коду происходят различные действия. В общем кука удаляется нормально, класс меняется нормально, но вот когда я кликаю второй раз, то мне возвращается все старые классы у элементов. Т.е возвращаются классы .link-profile и .link-logout. Открываю исходный код там у ссылок стоят классы link-signUp и link-signIn. В общем не могу понять почему так происходит.
sergeiss
Ничего не понял, что происходит... И что должно быть, по твоему замыслу.

Во-первых, удаляются ли классы link-profile & link-logout у элементов?
Во-вторых, а что вообще должно быть с объектами с классами link-signUp & link-signIn?

Короче говоря, распиши алгоритм, что ты хочешь получить.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
VeRTak
Изначально выглядит все вот так

<a id="bg-s" class="link-profile"></a>
<a
id="bg-s" class="link-logout"></a>


Кликаю на ссылку с классом link-logout.

Удаляется кука и html выглядит следующим образом

<a id="bg-s" class="link-signIn"></a>
<a
id="bg-s" class="link-signUp"></a>


Все так и должно быть, но если я сейчас кликну на link-signUp

У меня снова отработает что и отрабатывалось при link-logout

Ну и то же самое с link-signIn кликаю по этому элементу выполняется код как будто кликаю по link-profile.

Если страницу обновить то все встает на свои места и работает как нужно

VeRTak

if($.cookie('remember'))
{
navMenu("profile");
$("a.link-logout").on("click", function () {
console.log(this)
$(".link-profile").attr("class", "link-signIn");
$(".link-logout").attr("class", "link-signUp");
});
}
else
{
sing(".link-signUp");
sing(".link-signIn");
}


Вот что мне вернет консоль


<a id="bg-s" class="link-signUp"></a>
<a
id="bg-s" class="link-signUp"></a>


При первом и втором клике
sergeiss
Цитата (VeRTak @ 17.05.2017 - 19:50)
Все так и должно быть, но если я сейчас кликну на link-signUp

У меня снова отработает что и отрабатывалось при link-logout

Ну так правильно. Ты ж повесил обработчик на элемент :) Вот здесь:
 $("a.link-logout").on("click", function () {


Если ты хочешь, чтобы обработчик срабатывал только тогда, когда есть именно класс link-logout у этого объекта, то сначала вообще вынеси этот обработчик из ИФа. И напиши его так:
$('body').on('click', '.link-logout', function() {.....} );

Тогда, как только ты удалишь класс link-logout, то этот обработчик уже не будет вызываться. Ибо не для чего будет вызывать.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
VeRTak

if($.cookie('remember'))
{
navMenu("profile");
$('body').on('click', '.link-logout', function() {
$.cookie('remember', null, { expires: -1 } );
$(".link-profile").attr("class", "link-signIn");
$(".link-logout").attr("class", "link-signUp");
});
}
else
{
sing(".link-signUp");
sing(".link-signIn");
}


Безрезультатно, эффект тот же :(
VeRTak
Хотя не тот же. Спасибо. буду разбираться
sergeiss
Цитата (VeRTak @ 17.05.2017 - 20:08)
$('body').on('click', '.link-logout', function() {
            $.cookie('remember', null, { expires: -1 } );
            $(".link-profile").attr("class", "link-signIn");
            $(".link-logout").attr("class", "link-signUp");
        });

Я ж тебе говорю: вообще вынеси эту функцию вне ИФа!!!

ПыСы.
Обработчики не надо вешать внутри ИФов, это концептуально неправильно. Ты можешь что-то делать при некоторых условиях, но не создавать функции и обработчики. Особенно если в условие можешь попасть несколько раз - тогда ты создашь несколько обработчиков, КАЖДЫЙ из которых будет вызываться.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
VeRTak

if($.cookie('remember'))
{
navMenu("profile");
$('body').on('click', '.link-logout', function() {
console.log(this)
$.cookie('remember', null, { expires: -1 } );
$(".link-profile").attr("class", "link-signIn");
$(".link-logout").attr("class", "link-signUp");
});
}
else
{
sing(".link-signUp");
sing(".link-signIn");
}


Вот что происходит, тут все верно как ты и описал, сейчас после удаления куки мне консоль ничего не вернет, но функция navMenu("profile"); отработает, как будто кука есть, а по идеи должна отработать функция sing(".link-signIn")
VeRTak
Цитата (sergeiss @ 17.05.2017 - 20:13)
Я ж тебе говорю: вообще вынеси эту функцию вне ИФа!!!


Так а как быть без if?
sergeiss
Цитата (VeRTak @ 17.05.2017 - 20:15)
Так а как быть без if?

Я не говорю "убрать ИФ" smile.gif А только про то, что назначение обработчика убери оттуда.

Насчет логики я так не понял до конца. Когда происходит оценка этого условия насчет кук? Единожды или может быть многократно?

PS.
И еще. Ты хочешь удалить куки? А почему не $.removeCookie('name')?

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
VeRTak

Цитата (sergeiss @ 17.05.2017 - 20:20)
Насчет логики я так не понял до конца. Когда происходит оценка этого условия насчет кук? Единожды или может быть многократно?


Пока что 1 раз по коду.

Вот смотри я убрал вообще условие.


navMenu("profile");
$('body').on('click', '.link-logout', function() {
console.log(this)
$.cookie('remember', null, { expires: -1 } );
$(".link-profile").attr("class", "link-signIn");
$(".link-logout").attr("class", "link-signUp");
});

sing(".link-signUp");
sing(".link-signIn");


Сейчас я по клику удаляю, классы меняются. Но у меня выполняется функция navMenu("profile") а должна отработать sing(".link-signIn"). Условно говоря, navMenu("profile") там у меня по клику profile выезжает блок верху, а sing(".link-signIn"); тут по клику link-signIn выезжает блок слева. Так вот в исхожном коде после удаления куки у ссылки класс link-signIn. А блок выезжает сверху, т.е отрабатывается функция navMenu("profile"). Опять же после перезагрузки страницы все нормально
sergeiss
Цитата (VeRTak @ 17.05.2017 - 20:25)
Вот смотри я убрал вообще условие.

Цитата (sergeiss @ 17.05.2017 - 20:20)
Я не говорю "убрать ИФ"  А только про то, что назначение обработчика убери оттуда.


И еще это:

Цитата (sergeiss @ 17.05.2017 - 20:20)
Ты хочешь удалить куки? А почему не $.removeCookie('name')?



_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
VeRTak
sergeiss Блин, все я тут затупил. Надо на все было on() так повесить. Сейчас все заработало. Спасибо, огромное. В js еще зеленый. Ну ни чего smile.gif
VeRTak
Цитата (sergeiss @ 17.05.2017 - 20:29)
И еще это:

Цитата (sergeiss @ 17.05.2017 - 20:20)
Ты хочешь удалить куки? А почему не $.removeCookie('name')?


Вообще не знал biggrin.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.