HTML bên trong Twitter Bootstrap popover


288

Tôi đang cố gắng hiển thị HTML bên trong một popover bootstrap, nhưng bằng cách nào đó nó không hoạt động. Tôi tìm thấy một số câu trả lời ở đây nhưng nó sẽ không làm việc cho tôi. Xin vui lòng cho tôi biết nếu tôi làm điều gì sai.

<script>
  $(function(){
    $('[rel=popover]').popover({ 
      html : true, 
      content: function() {
        return $('#popover_content_wrapper').html();
      }
    });
  });
</script>

<li href="#" id="example" rel="popover" data-content="" data-original-title="A Title"> 
    popover
</li>

<div id="popover_content_wrapper" style="display: none">
    <div>This is your div content</div>
</div>

Câu trả lời:


351

Bạn không thể sử dụng <li href="#"vì nó thuộc về <a href="#"lý do tại sao nó không hoạt động, thay đổi nó và tất cả đều tốt.

Ở đây đang làm việc với JSFiddle , nó chỉ cho bạn cách tạo popover bootstrap.

Các phần có liên quan của mã dưới đây:

HTML:

<!-- 
Note: Popover content is read from "data-content" and "title" tags.
-->
<a tabindex="0"
   class="btn btn-lg btn-primary" 
   role="button" 
   data-html="true" 
   data-toggle="popover" 
   data-trigger="focus" 
   title="<b>Example popover</b> - title" 
   data-content="<div><b>Example popover</b> - content</div>">Example popover</a>

JavaScript:

$(function(){
    // Enables popover
    $("[data-toggle=popover]").popover();
});

Và nhân tiện, bạn luôn cần ít nhất là $("[data-toggle=popover]").popover();để bật popover. Nhưng ở chỗ data-toggle="popover"bạn cũng có thể sử dụng id="my-popover"hoặc class="my-popover". Chỉ cần nhớ kích hoạt chúng bằng cách sử dụng, ví dụ: $("#my-popover").popover();trong những trường hợp đó.

Đây là liên kết đến thông số đầy đủ: Bootstrap Popover

Tặng kem:

Nếu vì lý do nào đó bạn không thích hoặc không thể đọc nội dung của cửa sổ bật lên từ data-toggletitlethẻ. Bạn cũng có thể sử dụng ví dụ div ẩn và thêm một chút JavaScript. Dưới đây là một ví dụ về điều đó.


1
Xóa HREF href = "#" trên các thành phần thẻ ANCHOR để ngăn cuộn lên đầu trang!
peter_pilgrim

@peter_pilgrim Cảm ơn bạn đã nói điều đó. Tôi đã cập nhật câu trả lời của mình để sử dụng phiên bản bootstrap mới nhất và sửa lỗi href = "#" từ các thẻ <a> và thay vào đó chúng hoạt động giống như các nút. (Điều này cũng được ghi nhận tại trang web bootstrap). Đã thêm liên kết đó vào cuối câu trả lời của tôi.
Mauno Vähä

Tôi tìm thấy một vấn đề với các thiết bị iOS. Popover không hoạt động với màn hình cảm ứng. Bạn đã tìm thấy một công việc chung quanh? Trên thực tế, tôi nghĩ điều này cũng xảy ra với mã popover Bootstrap. Có ý kiến ​​gì không?
peter_pilgrim

285

bạn có thể sử dụng thuộc tính data-html="true":

<a href="#" id="example"  rel="popover" 
    data-content="<div>This <b>is</b> your div content</div>" 
    data-html="true" data-original-title="A Title">popover</a>

Có cách nào để sử dụng nó trong gwtbootstrap3 không, nó không hoạt động ở dạng này. Tôi đã hỏi câu hỏi ở đây stackoverflow.com/questions/34142815/ , nhưng cho đến nay vẫn chưa có câu trả lời.
ivan_bilan

Không biết tại sao câu trả lời trên được đánh dấu là chính xác. Có thể mọi người cố tình chọn tùy chọn phức tạp nhất để bảo toàn công việc của họ.
stephen

Tôi có cửa sổ bật lên này ở cuối trang của mình và hoạt động rất tốt ngoại trừ ... Nó chuyển tôi hoàn toàn trở lại đầu trang. Tôi có nó được thiết lập trong một vòng lặp foreach của hình thu nhỏ bootstrap. Có ý kiến ​​gì không?
foxtangocharlie

106

Một cách khác để xác định nội dung popover theo cách có thể sử dụng lại là tạo một thuộc tính dữ liệu mới như thế nào data-popover-contentvà sử dụng nó như thế này:

HTML:

<!-- Popover #1 -->
<a class="btn btn-primary" data-placement="top" data-popover-content="#a1" data-toggle="popover" data-trigger="focus" href="#" tabindex="0">Popover Example</a>

<!-- Content for Popover #1 -->
<div class="hidden" id="a1">
  <div class="popover-heading">
    This is the heading for #1
  </div>

  <div class="popover-body">
    This is the body for #1
  </div>
</div>

JS:

$(function(){
    $("[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();
        }
    });
});

Điều này có thể hữu ích khi bạn có rất nhiều html để đặt vào cửa sổ bật lên của mình.

Dưới đây là một ví dụ fiddle: http://jsfiddle.net/z824fn6b/


1
Cách tiếp cận mô-đun này là khá thanh lịch. Bạn có thể có nhiều cửa sổ bật lên và chỉ một chức năng javascript chung.
xtian

1
Điều này thật tuyệt, @Jack, cảm ơn bạn. Tôi thích không phải đặt HTML vào các thuộc tính. Quá bừa.
John Washam 10/03/2015

Công việc tuyệt vời ở đây, yêu thích sự đơn giản và tiện dụng
FastTrack

Bạn là MVP thực sự
chicyObject

Nó dường như không hoạt động với bootstrap 3.4.1, bạn có thể vui lòng giúp đỡ không? @Jack stackoverflow.com/questions/60514533/ Từ
user2513846

84

Bạn cần tạo một cá thể popover có bật tùy chọn html (đặt cái này vào tệp javascript của bạn sau mã JS popover):

$('.popover-with-html').popover({ html : true });


22

Tôi đã sử dụng một cửa sổ bật lên trong danh sách, Tôi đưa ra một ví dụ qua HTML

<a type="button" data-container="body" data-toggle="popover" data-html="true" data-placement="right" data-content='<ul class="nav"><li><a href="#">hola</li><li><a href="#">hola2</li></ul>'>

1
Cách tiếp cận đơn giản nhất bằng cách sử dụng các trích dẫn khác nhau để gói mã html. Suy nghĩ tốt.
Jimmy Ilenloa

Thật tuyệt, mẹo thực tế là thay đổi dấu ngoặc kép thành dấu ngoặc đơn!
Steven Barragán

8

Bạn chỉ cần đặt data-html="true"trong liên kết popover. Sẽ làm việc.


6

Đây là một sửa đổi nhỏ trên câu trả lời tuyệt vời của Jack .

Phần sau đây đảm bảo các popovers đơn giản, không có nội dung HTML, vẫn không bị ảnh hưởng.

JavaScript:

$(function(){
    $('[data-toggle=popover]:not([data-popover-content])').popover();
    $('[data-toggle=popover][data-popover-content]').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();
        }
    });
});

4

Tôi thực sự ghét đặt HTML dài bên trong thuộc tính, đây là giải pháp của tôi, rõ ràng và đơn giản (thay thế? Bằng bất cứ điều gì bạn muốn):

<a class="btn-lg popover-dismiss" data-placement="bottom" data-toggle="popover" title="Help">
    <h2>Some title</h2>
    Some text
</a>

sau đó

var help = $('.popover-dismiss');
help.attr('data-content', help.html()).text(' ? ').popover({trigger: 'hover', html: true});

4

Đây là một câu hỏi cũ, nhưng đây là một cách khác, sử dụng jQuery để sử dụng lại popover và tiếp tục sử dụng các thuộc tính dữ liệu bootstrap ban đầu để làm cho nó có ngữ nghĩa hơn:

Liên kết

<a href="#" rel="popover" data-trigger="focus" data-popover-content="#popover">
   Show it!
</a>

Nội dung tùy chỉnh để hiển thị

<!-- Let's show the Bootstrap nav on the popover-->
<div id="list-popover" class="hide">
    <ul class="nav nav-pills nav-stacked">
        <li><a href="#">Action</a></li>
        <li><a href="#">Another action</a></li>
        <li><a href="#">Something else here</a></li>
        <li><a href="#">Separated link</a></li>
    </ul>
</div>

Javascript

$('[rel="popover"]').popover({
    container: 'body',
    html: true,
    content: function () {
        var clone = $($(this).data('popover-content')).clone(true).removeClass('hide');
        return clone;
    }
});

Fiddle với ví dụ đầy đủ: http://jsfiddle.net/tomsarduy/262w45L5/


2

Bạn có thể thay đổi 'template / popover / popover.html' trong tệp 'ui-bootstrap-tpls-0.11.0.js' Viết: "bind-html-không an toàn" thay vì "ng-bind"

Nó sẽ hiển thị tất cả popover với html. * html không an toàn của nó. Chỉ sử dụng nếu bạn tin tưởng html.


0

Bạn có thể sử dụng sự kiện popover và kiểm soát độ rộng theo thuộc tính 'chiều rộng dữ liệu'

$('[data-toggle="popover-huongdan"]').popover({ html: true });
$('[data-toggle="popover-huongdan"]').on("shown.bs.popover", function () {
    var width = $(this).attr("data-width") == undefined ? 276 : parseInt($(this).attr("data-width"));
    $("div[id^=popover]").css("max-width", width);
});
 <a class="position-absolute" href="javascript:void(0);" data-toggle="popover-huongdan" data-trigger="hover" data-width="500" title="title-popover" data-content="html-content-code">
 <i class="far fa-question-circle"></i>
 </a>


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.