Есть форма с данными. При клике на ссылку, раскрывается дополнительный блок под ним. Таких полей несколько, у каждого свой блок должен открываться. При клике в любом месте, кроме раскрытого поля, это поле сворачивается. Фишка в том, что текст ссылки (которая раскрывает нужный блок) должна меняться в зависимости от видимости этого блока (с текста на крестик и обратно). Если кликать именно по этим ссылкам, то всё ок, но если поле сворачивается при клике в любом другом месте, то остается крестик. Не могу соеденить вместе эти две функции. Вот мой код https://jsfiddle.net/aq9Laaew/177752/
$(document).ready(function() {
/* Изменение текста ссылки для раскрывающихся блоков */
$(function() {
var changeLink = $("[data-toggle=collapse]");
$(changeLink).on("click", function (e){
$(this).closest(".accordeon").toggleClass("show");
var changeToggle = $(this).attr("aria-expanded");
var nameLink1 = $(this).data("show");
var nameLink2 = $(this).data("close");
if (changeToggle === 'true') {
$(this).children().html(nameLink1).removeClass('close')
} else {
$(this).children().html(nameLink2).addClass('close')
};
});
}) /* Изменение текста ссылки для раскрывающихся блоков END */
/* Аккордеон для блоков */
$(document).mouseup(function (e){
var accordeon = $(".accordeon.show");
var changeToggle = $("[data-toggle=collapse]").attr("aria-expanded");
console.log(changeToggle);
if (!accordeon.is(e.target)
&& accordeon.has(e.target).length === 0) {
$(".collapse.show").collapse('hide');
}
}); /* Аккордеон для блоков END */
});
Решила сама. Если кому надо, то вот: https://jsfiddle.net/Lpqnejw8/
/* Аккордеон для блоков */
$(document).mouseup(function (e){
var accordeon = $(".accordeon.show");
var changeToggle = $("[data-toggle=collapse]").attr("aria-expanded");
if (!accordeon.is(e.target)
&& accordeon.has(e.target).length === 0) {
$(".collapse.show").collapse('hide');
}
}); /* Аккордеон для блоков END */
$("[data-toggle=collapse]").click(changeLinkName);
});
/* Изменение текста ссылки для раскрывающихся блоков */
function changeLinkName(e) {
var nameLink1 = $(this).data("show");
var nameLink2 = $(this).data("close");
var changeToggle = $("[data-toggle=collapse]"); /*.attr("aria-expanded","false");*/
$('.collapse').on('show.bs.collapse', function (e) {
$(this).closest(".accordeon").addClass("show");
$(this).parent().find(changeToggle).children().html(nameLink2).addClass('close')
})
$('.collapse').on('hide.bs.collapse', function () {
$(this).closest(".accordeon").removeClass("show");
$(this).parent().find(changeToggle).children().html(nameLink1).removeClass('close')
})
}/* Изменение текста ссылки для раскрывающихся блоков END */
По хорошему код переписать, а так вот решение: https://jsfiddle.net/Rusic/wkvxa7b6/
var links = $("[data-toggle=collapse]");
$.each(links, function() {
let obj = $(this),
tActive = obj.attr("aria-expanded"),
tText = obj.data('show');
obj.children()
.text(tText)
.removeClass('close');
});
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Вот два компонента, при нажатии на MainWord появляется MainWordStand - окошкоНо при нажатии на крестик на этом окошке для его закрытия, не происходит...
Существует, страница Index в которой вызывается частичное представление