Здравствуйте, есть небольшая проблема. На страницу подключаю js файл, в котором описываю behaviors. Проблема конкретно с behaviors.phone_cheked_parent функцией $('.checked-parent').click(function() . При клике событие клика происходит несколько раз (т.е. заходит сразу и в if и в else), пробовал добавлять once, но не помогло, как можно исправить ситуацию?
Drupal.behaviors.edit_button_text = {
attach: function (context, settings) {
$('#edit-field-email-und-add-more').text('Добавить');
$('#edit-field-auto-number-und-add-more').text('Добавить');
$('#edit-field-mf-contacts-und-add-more').text('Добавить');
}
}
})(jQuery);
(function ($) {
Drupal.behaviors.phone_cheked = {
attach: function (context, settings) {
$('#user-edit-page .row-phone .block-content tbody tr td:nth-child(2) div:nth-child(2) input').click(function () {
$('input:not(:checked)').parent().removeClass("checked-phone");
$('input:checked').parent().addClass("checked-phone");
});
$('input:checked').parent().addClass("checked-phone");
}
}
})(jQuery);
(function ($) {
Drupal.behaviors.phone_cheked_parent = {
attach: function (context, settings) {
$('#user-edit-page .row-phone .block-content tbody tr td:nth-child(2) div:nth-child(2)').click(function () {
$('label').not( ".control-label.checked-phone").parent().removeClass("checked-parent");
$('.control-label.checked-phone').parent().addClass("checked-parent");
$('.checked-parent').click(function() {
if ($(this).siblings().hasClass('to-hide')) {
console.log($(this).siblings().hasClass('to-hide'));
$(this).siblings().removeClass('to-hide');
} else {
$(this).siblings().addClass('to-hide');
console.log($(this).siblings());
}
});
});
$('.control-label.checked-phone').parent().addClass("checked-parent");
$('.checked-parent').siblings().addClass("to-hide");
}
}
})(jQuery);
Комментарии
Не нужно каждый behavior оборачивать в (function ($) { // })(jQuery);
Используйте once():
if ($(this).siblings().hasClass('to-hide')) {
console.log($(this).siblings().hasClass('to-hide'));
$(this).siblings().removeClass('to-hide');
} else {
$(this).siblings().addClass('to-hide');
console.log($(this).siblings());
}
});
не подходит, срабатывает первый раз только один клик, а если кликать снова то по два клика как и было генерируется
А, сорри, не прочитал внимательно кода.
У Вас, зачем-то, 2 клика, должно хватить 1го.
Нужно либо к вот этой вот простыне once лепить:
Или выводить отдельно из-под нее этот ивент клика:
И в нем уже once().
к простыне лепил once - не помогло. Если эту часть
$('.checked-parent').click
вынести то работать будет также, два события происходит, и выносить ее нельзя оттуда, они друг без друга не могутЗвучит как не правда
да вот я тоже в это со вчерашнего дня не верю но есть как есть. Я вешал часть которая после else на dblclick, тогда по клику у нас с рабатывает одно, а по двойному - второму и все корректно работает, но вот беда, нужно чтобы было по одному клику)
Опишите что пытаетесь сделать, если приведете пример структуры - обещаю посмотреть и вникнуть.
структура примерно такая jsfiddle .
Основа: у нас есть структура div(группа радиокнопок)->div(радиокнопка, их много)->label->input
Идея: если радиокнопка нажата то остальные в текущей группе будут скрыты. Если нажать на радиокнопку которая выбрана то появяться остальные, если после этого тыкнуть на любой другой в группе или же на это то они скроются за исключением выбранной.
Что есть:
Если в части
$('.checked-parent').click(function()
убрать else то имеем:Чего не хватает:
Посмотрите вот этот пример: https://jsfiddle.net/m0334t5f/5/
Надеюсь, я уловил суть.
UPD - я вносил правки в HTML, в Вашем примере были ошибки с комментированием.
Обновил: https://jsfiddle.net/m0334t5f/6/
Был косяк с лишним циклом.
Вариант загрузки с выбранной кнопкой: https://jsfiddle.net/m0334t5f/9/
Надо указывать context вторым аргументом:
$(selector, context).something();
Недавно столкнулся с подобным на восьмёрке. Решилось все оборачиванием в each()