javascript - 我想创建一个带有动态内容的 Bootstrap 弹出窗口

标签 javascript jquery twitter-bootstrap

我正在尝试使用 bootstrap 制作一个弹出窗口,并将 PHP 中的动态内容放入其中(HTML 代码)。

我有以下代码:

<a class="psprn"
href="'.$prnUrl.'"
data-toggle="popover"
data-content="'.$prnName.'"
data-pspicture="'.$prnImage.'"
data-psrank="'.$prnRank.'"
data-psvideo="'.$prnVideos.'">'.$prnName.'</a>

这个 anchor 是用户的链接,所以我可以有 2、3、4(等等)个用户。 该 anchor 放置在“foreach”Yii 应用程序上,因此他具有动态内容(具有特定的图像、链接、排名、视频、内容)。

我有这个js代码:

$('[data-toggle="popover"]').hover(function () {
    var psrank = $(this).attr("data-psrank");
    var psvideo = $(this).attr("data-psvideo");
    var pspicture = $(this).attr("data-pspicture");
    var pscontent = $(this).attr("data-content");
//        console.log(psrank);
//        console.log(psvideo);
//        console.log(pspicture);
//        console.log(pscontent);

    $('[data-toggle="popover"]').popover({       
        trigger: 'hover',
        template: 
            '<div class="ps-placeholder>'+
                '<div class="picture">'+
                    '<img src="prnImage">'+
                '</div>'+
                '<div class="footy">'+
                    '<p>$prnName</p>'+
                    '<span>Rank: $prnRank &nbsp;&nbsp;&nbsp;&nbsp; Videos: $prnVideos</span>'+
                '</div>'+
            '</div>',
    });
});

但是出了点问题。我无法将数据属性的值放在工具提示模板上。

信息:

  • Bootstrap v4.0.0-alpha.4
  • jQuery v2.2.3

最佳答案

您当前拥有的内容将不起作用。您的变量名称被解释为字符串。您需要将 " 替换为 ` 符号,然后就可以在字符串中使用 ${someVariable}

这是一个基本示例。

//Your dynamic content
var catImage = "http://n-z.tv/wp-content/uploads/2017/08/cat-1024x683.jpg";
var message = "Hey this is some dynamic content";
var title = "Some Dynamic Content"

//Create the string and insert it into the body (or the "template" for you)
document.body.innerHTML = `
<div>
  <h3>${title}</h3>
  <img src="${catImage}"/>
  <p>${message}</p>
</div>
`
img {
  width: 100px;
}

您可以通过创建一个处理此问题的函数来更进一步。

let generateDynamicContent = function(title, imageSrc, message){
    return `<div>
      <h3>${title}</h3>
      <img src="${imageSrc}"/>
      <p>${message}</p>
    </div>
    `
}

let dynamic = document.getElementById("dynamic");
let container = document.getElementById("container");

let imageSrcs = [
  "https://404store.com/2017/08/19/cat-wallpaper-1024.jpg",
  "https://fanparty.ru/fanclubs/cats/gallery/534626_cats.jpg",
  "http://n-z.tv/wp-content/uploads/2017/08/cat-1024x683.jpg"
];

let counter = 0;
dynamic.addEventListener("click", function(){

    let content = generateDynamicContent(
      `Dynamic title #${++counter}`, 
      imageSrcs[counter%imageSrcs.length],
      `Dynamic content #${counter}`
    )
    container.innerHTML = content;

});
img {
  width: 100%;
  max-width: 300px;
  height: auto;
}
<button id="dynamic">Click me for dynamic content</button>
<div id="container"></div>

关于javascript - 我想创建一个带有动态内容的 Bootstrap 弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49413730/

相关文章:

javascript - 可通过旋转元素调整大小的 jQuery UI

javascript - 用增量值和超时填充栏

javascript - 在 AngularJS 中使用 HTML/CSS 替换框内容的大小

javascript - TestCafe - Narbeans Ide - ReferenceError : Selector is not defined

javascript - 用于 div 的 id 的 Bootstrap datetimepicker

jquery - typeahead.js 根本没有响应 - Rails

javascript - SetTimeout 递归函数超出最大调用堆栈大小 (Javascript)

jquery - 当文本太长时使用 jQuery 更改字体大小

css - 无法使子控件正确溢出

html - 如何在文本框和我在 boostrap here 中创建的 html 表单之间添加空格?