Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Проблема с селекторами(наверно) (https://javascript.ru/forum/events/46344-problema-s-selektorami-naverno.html)

eforce 06.04.2014 19:13

Проблема с селекторами(наверно)
 
Вот скрипт:
// начиная отсюда и до
$('.accordion-active-container-title').click(function (e) {
	e.preventDefault(false); // отменяю дейстие ссылки
	$(this).next('.accordion-active-content').slideToggle(1000);
	$(this).removeClass().toggleClass('accordion-inactive-container-title');
});
//до этого момента все работает, а дальше нет
//незнаю причины...
// тут я как бы обращаюсь к элементу который динамически уже изменил только что сам,

$('.accordion-inactive-container-title').click(function (e) {
	alert ('torololo');
// ничего не дает

});

Vlasenko Fedor 06.04.2014 22:35

// начиная отсюда и до
$('.accordion-active-container-title').click(function (e) {
	e.preventDefault(false); // отменяю дейстие ссылки
	$(this).next('.accordion-active-content').slideToggle(1000);
	$(this).removeClass().toggleClass('accordion-inactive-container-title');
	alert ('torololo');
});

danik.js 06.04.2014 23:00

Еще один. Да сколько же вас таких... jquery-головых...

Все беды от того что суются в jquery не разобравшись с основами.

$('.accordion-inactive-container-title') - делается выборка по селектору. На момент исполнения этой строчки кода нет ни одного элемента с таким классом, поэтому функция $ вернет пустой массив (верней array-like объект). Соответственно функции .click() не на что вешать обработчик и она благополучно отрабатывает "вхолостую", не делая абсолютно ничего.

Если так сильно хочется писать в подобном стиле, используют делегирование обработки событий. Это позволяет проверять соответствие селектору в момент события (вместо незамедлительной выборки по селектору в момент исполнения кода):

$('.accordion').on('click', '.accordion-inactive-container-title', function() {...});

danik.js 06.04.2014 23:01

Цитата:

Сообщение от eforce
e.preventDefault(false);

Разве этот метод принимает аргументы?

eforce 07.04.2014 00:29

Что то такое:
$('.col-md-12').on('click', '.accordion-active-container-title', function (e) {
e.preventDefault();
$(this).removeClass().toggleClass('accordion-inactive-container-title').next().slideUp('normal');
});
$('.col-md-12').on('click', '.accordion-inactive-container-title', function (e) {
e.preventDefault();
$(this).removeClass().toggleClass('accordion-active-container-title').next().slideDown('normal');
});

Решает проблему =)
Если кто столкнется.


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