Использование пользовательского значения атрибута данных на основе выбора поповера - не работает
Я пытаюсь использовать значение атрибута пользовательских данных на основе выбора, сделанного в параметрах, отображаемых в всплывающем окне.
Здесь, в приведенном ниже примере, у меня есть сообщение "Я не замужем, без детей", где при нажатии на одиночку появляется поповер с опцией (холост / женат). Если пользователь нажимает кнопку "В браке", меня заменяют на " Мы женаты без детей".
HTML
<div>
<span id="m-marital-status" data-single="I am" data-multiple= "We are">I am</span>
<div class="section-input">
<div class="popover-markup" id="marital-status"><a href="#" class="trigger">Single</a> with
<div class="head hide"></div>
<div class="content hide">
<ul>
<li>married</li>
<li>single</li>
</ul>
<div class="footer hide">test</div>
</div>
<span>no Kids</span>.
</div>
</div>
CSS
.popover-title {
padding: 0;
border: 0;
}
JS
$('.popover-markup>.trigger').popover({
html: true,
placement: 'top',
content: function () {
return $(this).parent().find('.content').html();
}
});
3 ответа
Пытаться
<ul class="marital-status">
<li data-status="We are">married</li>
<li data-status="I am">single</li>
</ul>
затем
$(document).on('click', 'ul.marital-status li', function () {
$('#m-marital-status').css('color', 'red').html($(this).data('status'));
$('#marital-status .trigger').text($(this).text())
$('.popover-markup>.trigger').popover('hide')
});
Демо: скрипка
Вам нужно делегировать событие click для контента popover с помощью чего-то вроде:
$('body').on("click", ".popover li", function() {
// Code here
})
Вот рабочая скрипка: http://jsfiddle.net/h7fVL/3/
Что происходит, так это то, что вы получаете html всплывающего окна в виде строки и передаете его в Bootstrap. Позже он создает еще один div, где он помещает этот контент. И с этим есть две проблемы. Вы пытаетесь прикрепить события перед показом всплывающего окна. И ваш селектор для событий click фактически соответствует HTML-разметке, подготовленной для всплывающего окна, но не фактическим элементам DOM в показанном всплывающем окне. Вот решение проблемы:
trigger.popover({
html: true,
placement: 'top',
content: function () {
setTimeout(function() {
$('.popover-content li').click(function() {
closePopup();
$('#m-marital-status').css('color','red');
});
}, 500);
return $(this).parent().find('.content').html();
}
});