我尝试在data-lang
标签上的click
事件之后,使用以下代码获取a
值:
$("[data-toggle=popover]").popover({
html: true,
content: function() {
var content = $(this).attr("data-popover-content");
return $(content).children(".popover-body").html();
},
title: function() {
var title = $(this).attr("data-popover-content");
return $(title).children(".popover-heading").html();
}
});
$('.popover-body').on('click', 'a', function() {
let lang = $(this).data("lang")
alert(lang);
});
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<nav class="mainnav">
<ul class="topnav">
<a href="#" data-toggle="popover" data-popover-content="#a1">Popover</a>
</ul>
</nav>
<div id="a1" class="hidden">
<div class="popover-heading">_('Välj ditt språk')</div>
<div class="popover-body">
<div class="lang">
<a href="#" data-lang="no">Norsk</a>
</div>
<div>
<a href="#" data-lang="de">Deutsch</a>
</div>
<div>
<a href="#" data-lang="nl">Nederlands</a>
</div>
<div>
<a href="#" data-lang="es">Español</a>
</div>
<div>
<a href="#" data-lang="dk">Dansk</a>
</div>
</div>
</div>
但是当我单击它时,什么也没发生。
我该如何解决?
答案 0 :(得分:1)
问题是因为尽管您正在使用委托事件处理程序(这是解决此问题的正确方法),但插件并未将.popover-body
元素与弹出窗口的内容一起克隆。如果您在打开弹出窗口后检查DOM中的元素,就会看到此信息。
要解决此问题,您可以使用.mainnav
元素作为委派事件处理程序的主要选择器:
$("[data-toggle=popover]").popover({
html: true,
content: function() {
var content = $(this).attr("data-popover-content");
return $(content).children(".popover-body").html();
},
title: function() {
var title = $(this).attr("data-popover-content");
return $(title).children(".popover-heading").html();
}
});
$('.mainnav').on('click', '.topnav div a', function() { // change this
let lang = $(this).data("lang")
console.log(lang);
});
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<nav class="mainnav">
<ul class="topnav">
<a href="#" data-toggle="popover" data-popover-content="#a1">Popover</a>
</ul>
</nav>
<div id="a1" class="hidden">
<div class="popover-heading">_('Välj ditt språk')</div>
<div class="popover-body">
<div class="lang">
<a href="#" data-lang="no">Norsk</a>
</div>
<div>
<a href="#" data-lang="de">Deutsch</a>
</div>
<div>
<a href="#" data-lang="nl">Nederlands</a>
</div>
<div>
<a href="#" data-lang="es">Español</a>
</div>
<div>
<a href="#" data-lang="dk">Dansk</a>
</div>
</div>
</div>
答案 1 :(得分:0)
问题似乎出在选择器上。在打开弹出窗口的源代码中,我看不到类popover-body
。这应该可以:
$("[data-toggle=popover]").popover({
html: true,
content: function() {
var content = $(this).attr("data-popover-content");
return $(content).children(".popover-body").html();
},
title: function() {
var title = $(this).attr("data-popover-content");
return $(title).children(".popover-heading").html();
}
});
$('body').on('click', '.popover-content a', function() {
let lang = $(this).data("lang")
alert(lang);
});
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<nav class="mainnav">
<ul class="topnav">
<a href="#" data-toggle="popover" data-popover-content="#a1">Popover</a>
</ul>
</nav>
<div id="a1" class="hidden">
<div class="popover-heading">_('Välj ditt språk')</div>
<div class="popover-body">
<div class="lang">
<a href="#" data-lang="no">Norsk</a>
</div>
<div>
<a href="#" data-lang="de">Deutsch</a>
</div>
<div>
<a href="#" data-lang="nl">Nederlands</a>
</div>
<div>
<a href="#" data-lang="es">Español</a>
</div>
<div>
<a href="#" data-lang="dk">Dansk</a>
</div>
</div>
</div>
答案 2 :(得分:0)
选择器“ popover-body”可能不存在问题。 看看JsFiddle:https://jsfiddle.net/xe54r7db/37/
$("[data-toggle=popover]").popover({
html : true,
content: function() {
var content = $(this).attr("data-popover-content");
return $(content).children(".popover-body").html();
},
title: function() {
var title = $(this).attr("data-popover-content");
return $(title).children(".popover-heading").html();
}
});
//Register with document parent selector to attach event.
$(document).on('click','.popover-content a',function(e){
// e.preventDefault();
let lang = $(this).data("lang")
alert(lang);
});
答案 3 :(得分:0)
.on()方法将事件处理程序附加到jQuery对象中当前选定的元素集,我将类选择器更改为文档,以将事件绑定到元素
$(document).on('click', 'a', function() {
let lang = $(this).data("lang")
alert(lang);
});