获取 popover data-content 中 HTML 标签的元素
Get the elements of HTML tags inside data-content of popover
我在 Bootstrap3 的 "popover" 工作。我在这里放置了 HTML 内容,如下所示,
<a href='#' class='btn' title ='Test' data-trigger='focus' data-
toggle='popover' data-html='true' id = 'testOutside' data-content='<a
href="#" id="testInside" class="btn">Inside</a>'>Click Here </a>
我无法引用 data-content 属性中存在的 html 元素。
如下所示,
$(document).ready(function(){
$('[data-toggle="popover"]').popover();
// the below is not working
$('#testInside').click(function(){
alert('Inside');
});
$('#testOutside').click(function(){
alert('Outside');
});
});
但是 bootstrap 类 正在应用,在这种情况下 "btn" 正在应用到锚标记。附上jsFiddle。谁能给我解释一下?
当您的文档准备就绪后,DOM 中没有元素的 id 为 testInside。单击#testOutside 时会创建此元素。因此,您在 $(document).ready(...)
创建的任何事件处理程序都是无用的。
所以正确的做法是在将#testInside 添加到 DOM 后立即注册回调。我们知道当点击#testOuside 时会发生这种情况。
// adding delay over here due to popover close event may trigger before link click event (which happens in Firefox)
$('you-selector').popover({
delay: 100
});
$('#testOutside').click(function(){
$('#testInside').click(function(){
alert('Inside');
});
alert('Outside');
});
要使其正常工作,您必须确保在弹出窗口选项中添加一个小 delay
,默认值为 0
。由于某种原因,这使得它无法工作。
从触发弹出窗口的link中删除data-content
属性,你不需要那个,它不会起作用,即使你设置html
属性 在 true
的选项中。
下一步是向触发元素添加一个事件侦听器,它将侦听 inserted.bs.popover
事件。当模板添加到 DOM 时,这个会被触发。
此时您可以创建一个元素,将其添加到弹出窗口并将您的点击事件监听器分配给它。您不必创建元素,也可以使用 data-content
属性添加元素。
Here 您可以找到有关 Popover.js 选项和事件的信息
更新!
我才发现其实只是延迟而已。因此 Parth Shah 提到的解决方案也将起作用。
看起来弹出框的隐藏事件在你点击里面之前被触发了link。
所以这就是所有需要的
$('you-selector').popover({
delay: 100
});
$(document).ready(function(){
$('[data-toggle="popover"]').popover({
delay: 100 // this is definitely needed !
});
$('#testOutside').click(function(){
alert('Outside');
console.log('outside');
});
});
// Listen for inserted template to DOM
$('[data-toggle="popover"]').on('inserted.bs.popover', function () {
console.log($('.popover-content').find('#testInside'));
// Create the inside link.
$inside = $('<a href="#" id="inside">Inside</a>');
// Add the click event-handler only once
$inside.one('click', function() {
alert('Inside');
console.log('foo');
});
$('.popover-content').append($inside[0])
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet"/>
<a href='#' class='btn' title ='Test' data-trigger='focus' data-toggle='popover' data-html='true' id = 'testOutside'>Click Here </a>
实际上,可以使用 shown.bs.popover
触发器轻松完成。它将在弹出窗口显示后执行。然后可以add new listeners
或刷新现有的。
Javascript
$('[data-toggle="popover"]').popover(
{html:true}
);
$('[data-toggle="popover"]').on('shown.bs.popover', function () {
$('#testInside').click(function(){
alert('Inside');
});
$('#testOutside').click(function(){
alert('Outside');
});
})
HTML
<a href='#' class='btn' title ='Test' data-trigger='focus' data-
toggle='popover' data-html='true' id = 'testOutside' data-content='<a
href="#" id="testInside" class="btn">Inside</a>'>Click Here </a>
我使用 shown.bs.popover 解决了一个非常具有挑战性的问题,即使我在 pophover 上有一个评级组件,但问题是评级没有'无法获取悬停事件,因为需要在创建评级输入时调用此方法。
$(".rating_product").rating('refresh',
{showClear: false,hoverEnabled:true,hoverChangeStars:true,showCaption: true,starCaptions: {5.0:'5 Stars'}
});
所以我放了这个,它比插入的函数更有效。
$('[data-toggle="popover"]').on('shown.bs.popover', function () {
$(".rating_product").rating('refresh',
{showClear: false,hoverEnabled:true, hoverChangeStars:true,showCaption: true,starCaptions: {5.0:'5 Stars'}
});
})
我在 Bootstrap3 的 "popover" 工作。我在这里放置了 HTML 内容,如下所示,
<a href='#' class='btn' title ='Test' data-trigger='focus' data-
toggle='popover' data-html='true' id = 'testOutside' data-content='<a
href="#" id="testInside" class="btn">Inside</a>'>Click Here </a>
我无法引用 data-content 属性中存在的 html 元素。
如下所示,
$(document).ready(function(){
$('[data-toggle="popover"]').popover();
// the below is not working
$('#testInside').click(function(){
alert('Inside');
});
$('#testOutside').click(function(){
alert('Outside');
});
});
但是 bootstrap 类 正在应用,在这种情况下 "btn" 正在应用到锚标记。附上jsFiddle。谁能给我解释一下?
当您的文档准备就绪后,DOM 中没有元素的 id 为 testInside。单击#testOutside 时会创建此元素。因此,您在 $(document).ready(...)
创建的任何事件处理程序都是无用的。
所以正确的做法是在将#testInside 添加到 DOM 后立即注册回调。我们知道当点击#testOuside 时会发生这种情况。
// adding delay over here due to popover close event may trigger before link click event (which happens in Firefox)
$('you-selector').popover({
delay: 100
});
$('#testOutside').click(function(){
$('#testInside').click(function(){
alert('Inside');
});
alert('Outside');
});
要使其正常工作,您必须确保在弹出窗口选项中添加一个小 delay
,默认值为 0
。由于某种原因,这使得它无法工作。
从触发弹出窗口的link中删除data-content
属性,你不需要那个,它不会起作用,即使你设置html
属性 在 true
的选项中。
下一步是向触发元素添加一个事件侦听器,它将侦听 inserted.bs.popover
事件。当模板添加到 DOM 时,这个会被触发。
此时您可以创建一个元素,将其添加到弹出窗口并将您的点击事件监听器分配给它。您不必创建元素,也可以使用 data-content
属性添加元素。
Here 您可以找到有关 Popover.js 选项和事件的信息
更新!
我才发现其实只是延迟而已。因此 Parth Shah 提到的解决方案也将起作用。
看起来弹出框的隐藏事件在你点击里面之前被触发了link。
所以这就是所有需要的
$('you-selector').popover({
delay: 100
});
$(document).ready(function(){
$('[data-toggle="popover"]').popover({
delay: 100 // this is definitely needed !
});
$('#testOutside').click(function(){
alert('Outside');
console.log('outside');
});
});
// Listen for inserted template to DOM
$('[data-toggle="popover"]').on('inserted.bs.popover', function () {
console.log($('.popover-content').find('#testInside'));
// Create the inside link.
$inside = $('<a href="#" id="inside">Inside</a>');
// Add the click event-handler only once
$inside.one('click', function() {
alert('Inside');
console.log('foo');
});
$('.popover-content').append($inside[0])
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet"/>
<a href='#' class='btn' title ='Test' data-trigger='focus' data-toggle='popover' data-html='true' id = 'testOutside'>Click Here </a>
实际上,可以使用 shown.bs.popover
触发器轻松完成。它将在弹出窗口显示后执行。然后可以add new listeners
或刷新现有的。
Javascript
$('[data-toggle="popover"]').popover(
{html:true}
);
$('[data-toggle="popover"]').on('shown.bs.popover', function () {
$('#testInside').click(function(){
alert('Inside');
});
$('#testOutside').click(function(){
alert('Outside');
});
})
HTML
<a href='#' class='btn' title ='Test' data-trigger='focus' data-
toggle='popover' data-html='true' id = 'testOutside' data-content='<a
href="#" id="testInside" class="btn">Inside</a>'>Click Here </a>
我使用 shown.bs.popover 解决了一个非常具有挑战性的问题,即使我在 pophover 上有一个评级组件,但问题是评级没有'无法获取悬停事件,因为需要在创建评级输入时调用此方法。
$(".rating_product").rating('refresh',
{showClear: false,hoverEnabled:true,hoverChangeStars:true,showCaption: true,starCaptions: {5.0:'5 Stars'}
});
所以我放了这个,它比插入的函数更有效。
$('[data-toggle="popover"]').on('shown.bs.popover', function () {
$(".rating_product").rating('refresh',
{showClear: false,hoverEnabled:true, hoverChangeStars:true,showCaption: true,starCaptions: {5.0:'5 Stars'}
});
})