Cách chèn nút đóng trong cửa sổ bật lên cho bootstrap


76

JS:

$(function(){
  $("#example").popover({
    placement: 'bottom',
    html: 'true',
    title : '<span class="text-info"><strong>title</strong></span> <button type="button" id="close" class="close">&times;</button>',
    content : 'test'
  })
  $('html').click(function() {
    $('#close').popover('hide');
  });
});

HTML:

<button type="button" id="example" class="btn btn-primary" ></button>

Tôi đang viết mã của bạn không hiển thị cửa sổ bật lên của bạn.

có ai gặp phải vấn đề này không?

Câu trả lời:


88

Bạn cần đánh dấu đúng

<button type="button" id="example" class="btn btn-primary">example</button>

Sau đó, có một cách là gắn trình xử lý đóng vào bên trong chính phần tử, các thao tác sau:

$(document).ready(function() {
    $("#example").popover({
        placement: 'bottom',
        html: 'true',
        title : '<span class="text-info"><strong>title</strong></span>'+
                '<button type="button" id="close" class="close" onclick="$(&quot;#example&quot;).popover(&quot;hide&quot;);">&times;</button>',
        content : 'test'
    });
});  

1
@Sebf, bootstrap nhằm mục đích nhẹ nhất có thể, nhiều vấn đề cần được giải quyết trên lớp thực thi. Vâng, một số "thiếu" phụ tùng được baffling ;-)
davidkonrad

11
@jonschlinkert data-dismiss="popover"thay onclickthế không hoạt động. Đây là một vấn đề được ghi chép rõ ràng.
Hengjie

1
Sử dụng các sự kiện HTML và JavaScript nội tuyến trong tiêu đề cửa sổ bật lên là một thực tiễn khá tệ. Nó có thể hiệu quả, nhưng nó sẽ khiến bạn đau đầu về sau.
Mario Fink

1
@Mario Fink (và Robert Kotcher) - hoàn toàn đồng ý. Nhưng đây là cách bạn có thể triển khai chức năng mong muốn trong twitter bootstrap 2.x, bây giờ cách dự định không thành công. Tôi chỉ đơn giản trả lời câu hỏi.
davidkonrad

2
Đối với tôi, ví dụ trên chỉ hoạt động bằng cách thay thế các dấu ngoặc kép (& quot;) bằng dấu ngoặc kép (& # 39;)
Ruut

32

Tôi cần tìm thứ gì đó có thể hoạt động cho nhiều cửa sổ bật lên và trong Bootstrap 3.

Đây là những gì tôi đã làm:

Tôi có nhiều phần tử mà tôi muốn có một tác phẩm bật lên, vì vậy tôi không muốn sử dụng id.

Đánh dấu có thể là:

<button class="btn btn-link foo" type="button">Show Popover 1</button>
<button class="btn btn-link foo" type="button">Show Popover 2</button>
<button class="btn btn-link foo" type="button">Show Popover 3</button>

Nội dung cho các nút lưu và đóng bên trong cửa sổ bật lên:

var contentHtml = [
    '<div>',
        '<button class="btn btn-link cancel">Cancel</button>',
        '<button class="btn btn-primary save">Save</button>',
    '</div>'].join('\n');

và javascript cho cả 3 nút:

Phương pháp này hoạt động khi vùng chứa là mặc định không được đính kèm với nội dung.

$('.foo').popover({
    title: 'Bar',
    html: true,
    content: contentHtml,
    trigger: 'manual'
}).on('shown.bs.popover', function () {
    var $popup = $(this);
    $(this).next('.popover').find('button.cancel').click(function (e) {
        $popup.popover('hide');
    });
    $(this).next('.popover').find('button.save').click(function (e) {
        $popup.popover('hide');
    });
});

Khi vùng chứa được gắn vào 'body'

Sau đó, sử dụng aria được mô tả bằng cách tìm cửa sổ bật lên và ẩn nó đi.

$('.foo').popover({
    title: 'Bar',
    html: true,
    content: contentHtml,
    container: 'body',
    trigger: 'manual'
}).on('shown.bs.popover', function (eventShown) {
    var $popup = $('#' + $(eventShown.target).attr('aria-describedby'));
    $popup.find('button.cancel').click(function (e) {
        $popup.popover('hide');
    });
    $popup.find('button.save').click(function (e) {
        $popup.popover('hide');
    });
});

Cải tiến nhỏ:popup.find('button.cancel').on('click',function(e) {...}
bart

7
khi tôi nhấp vào liên kết hủy bỏ, nó sẽ đóng cửa sổ bật lên. Nhưng tôi phải nhấp hai lần vào liên kết kích hoạt cửa sổ bật lên vì nó không mở cửa sổ bật lên trong lần nhấp đầu tiên.
Nizam Kazi

Có lớp được xác định trước .closevới hiệu ứng di chuột, vì vậy việc chèn nút đóng vào tiêu đề hoặc nội dung dễ dàng như vậy <span class=close>&times;</span>.
lubosdz

@NizamKazi Sử dụng giải pháp của tôi dưới đây để giải quyết rằng: stackoverflow.com/a/58923567/5376813
TetraDev

27

Tôi thấy các câu trả lời khác không đủ chung chung hoặc quá phức tạp. Đây là một cái đơn giản luôn hoạt động (cho bootstrap 3):

$('[data-toggle="popover"]').each(function () {
    var button = $(this);
    button.popover().on('shown.bs.popover', function() {
        button.data('bs.popover').tip().find('[data-dismiss="popover"]').on('click', function () {
            button.popover('toggle');
        });
    });
});

Sau đó, chỉ cần thêm thuộc tính data-dismiss="popover"vào nút đóng của bạn. Ngoài ra, hãy đảm bảo không sử dụng popover('hide')ở nơi khác trong mã của bạn vì nó ẩn cửa sổ bật lên nhưng không đặt đúng trạng thái bên trong của nó trong mã bootstrap, điều này sẽ gây ra sự cố trong lần sử dụng tiếp theo popover('toggle').


2
Vì một số lý do, sử dụng Bootstrap 3, .popover('toggle');không bao giờ làm bất cứ điều gì cho tôi, ở đâu cũng như .popover('hide');vậy. Ngoài ra, giải pháp này là yêu thích của tôi. Cảm ơn bạn!
hvaughan3

Điều đó sẽ không ràng buộc sự kiện nhấp chuột trên mỗi sự kiện popover-show-event, dẫn đến nhiều liên kết?
pdu

@pduersteler đây là mã cũ, nhưng nó được sử dụng trong sản xuất, vì vậy tôi khá chắc chắn rằng nó hoạt động. Tôi đoán bootstrap tạo ra một cửa sổ bật lên mới và do đó một nút đóng mới, mỗi khi nút được nhấp. Nếu có nhiều sự kiện trên nút đóng, nó sẽ chuyển đổi nhiều lần và tôi sẽ nhận thấy lỗi (hy vọng). Hãy cho tôi biết nếu bạn có thể xác nhận sự cố. Suy nghĩ thứ hai, có lẽ đó là lý do tại sao tôi gặp sự cố popover('hide')không phá hủy cửa sổ bật lên mà chỉ ẩn nó đi?
youen

cái này phải có $(button.data('bs.popover').tip).find('[data-dismiss="popover"]')trong bootstrap hiện đại (> = 4?)
Mike Campbell

18

Các ví dụ trước có hai nhược điểm chính:

  1. Theo một cách nào đó, nút 'đóng' cần nhận biết được ID của phần tử được tham chiếu.
  2. Sự cần thiết phải thêm vào sự kiện 'shows.bs.popover', một người nghe 'nhấp' vào nút đóng; đó cũng không phải là một giải pháp tốt vì sau đó bạn sẽ thêm người nghe như vậy mỗi khi 'cửa sổ bật lên' được hiển thị.

Dưới đây là một giải pháp không có nhược điểm như vậy.

Theo mặc định, phần tử 'popover' được chèn ngay sau phần tử được tham chiếu trong DOM (sau đó lưu ý phần tử được tham chiếu và popover là các phần tử anh em ngay lập tức). Do đó, khi nút 'đóng' được nhấp, bạn có thể chỉ cần tìm phần tử gốc 'div.popover' gần nhất của nó và sau đó tìm phần tử anh chị em ngay trước của phần tử cha đó.

Chỉ cần thêm mã sau vào trình xử lý 'onclick' của nút 'đóng:

$(this).closest('div.popover').popover('hide');

Thí dụ:

var genericCloseBtnHtml = '<button onclick="$(this).closest(\'div.popover\').popover(\'hide\');" type="button" class="close" aria-hidden="true">&times;</button>';

$loginForm.popover({
    placement: 'auto left',
    trigger: 'manual',
    html: true,
    title: 'Alert' + genericCloseBtnHtml,
    content: 'invalid email and/or password'
});

Wow, giải pháp hay và đơn giản. Làm việc cho tôi.
Adrian Enriquez

1
Với Bootstrap 4.3, tôi phải thêm sanitize: falsevào các tùy chọn cửa sổ bật lên
Richard

15

nhập mô tả hình ảnh ở đây

Sau đây là những gì tôi vừa sử dụng trong dự án của mình. Và hy vọng nó có thể giúp bạn

<a id="manualinputlabel" href="#" data-toggle="popover" title="weclome to use the sql quer" data-html=true  data-original-title="weclome to use the sql query" data-content="content">example</a>


$('#manualinputlabel').click(function(e) {
              $('.popover-title').append('<button id="popovercloseid" type="button" class="close">&times;</button>');
              $(this).popover();

          });

      $(document).click(function(e) {
         if(e.target.id=="popovercloseid" )
         {
              $('#manualinputlabel').popover('hide');                
         }

      });

Này, cảm ơn vì anwser của bạn! Bạn có biết cách căn giữa &times;biểu tượng theo chiều dọc trong h3.popover-titleđối tượng không?
Renato Gama

Hoạt động tốt, nhưng tôi gặp vấn đề tương tự với căn chỉnh dọc. Tôi thêm lớp của riêng tôi để nút chặt chẽ với line-height: 0.7 !important;và nhìn tốt
dading84

khi tôi nhấp vào liên kết hủy bỏ, nó sẽ đóng cửa sổ bật lên. Nhưng tôi phải nhấp đúp chuột vào liên kết popover-kích hoạt như nó không mở popover trong nhấp chuột đầu tiên
Shurvir Mori

9

Tôi đã kiểm tra nhiều ví dụ mã được đề cập và đối với tôi, cách tiếp cận từ Chris đang hoạt động hoàn hảo. Tôi đã thêm mã của mình vào đây để có bản demo hoạt động của nó.

Tôi đã thử nghiệm nó với Bootstrap 3.3.1 và tôi chưa thử nghiệm nó với phiên bản cũ hơn. Nhưng nó chắc chắn không hoạt động với 2.x vì shown.bs.popoversự kiện được giới thiệu với 3.x.

$(function() {
  
  var createPopover = function (item, title) {
                       
        var $pop = $(item);
        
        $pop.popover({
            placement: 'right',
            title: ( title || '&nbsp;' ) + ' <a class="close" href="#">&times;</a>',
            trigger: 'click',
            html: true,
            content: function () {
                return $('#popup-content').html();
            }
        }).on('shown.bs.popover', function(e) {
            //console.log('shown triggered');
            // 'aria-describedby' is the id of the current popover
            var current_popover = '#' + $(e.target).attr('aria-describedby');
            var $cur_pop = $(current_popover);
          
            $cur_pop.find('.close').click(function(){
                //console.log('close triggered');
                $pop.popover('hide');
            });
          
            $cur_pop.find('.OK').click(function(){
                //console.log('OK triggered');
                $pop.popover('hide');
            });
        });

        return $pop;
    };

  // create popover
  createPopover('#showPopover', 'Demo popover!');

  
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet"/>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>

<button class="btn btn-primary edit" data-html="true" data-toggle="popover" id="showPopover">Show</button>

<div id="popup-content" class="hide">
    <p>Simple popover with a close button.</p>
    <button class="btn btn-primary OK">OK</button>
</div>


1
Tôi đoán nó phải$cur_pop.popover('hide');
Bernhard Döbler

5

Mẹo là lấy Popover hiện tại bằng .data ('bs.popover'). Tip () :

$('#my_trigger').popover().on('shown.bs.popover', function() {
    // Define elements
    var current_trigger=$(this);
    var current_popover=current_trigger.data('bs.popover').tip();

    // Activate close button
    current_popover.find('button.close').click(function() {
        current_trigger.popover('hide');
    });
});

4

Chỉ muốn cập nhật câu trả lời. Theo Swashata Ghosh, sau đây là một cách đơn giản hơn phù hợp với moi:

HTML:

<button type="button" class="btn btn-primary example">Example</button>

JS:

$('.example').popover({
   title: function() {
      return 'Popup title' +
             '<button class="close">&times</button>';
   },
   content: 'Popup content',
   trigger: 'hover',
   html: true
});

$('.popover button.close').click(function() {
   $(this).popover('toggle');
});

4

Điều này hoạt động với nhiều cửa sổ bật lên và tôi cũng đã thêm một lượng lớn JS bổ sung để xử lý các vấn đề chỉ mục z xảy ra với các cửa sổ bật lên chồng chéo:

http://jsfiddle.net/erik1337/fvE22/

JavaScript:

var $elements = $('.my-popover');
$elements.each(function () {
    var $element = $(this);

    $element.popover({
        html: true,
        placement: 'top',
        container: $('body'), // This is just so the btn-group doesn't get messed up... also makes sorting the z-index issue easier
        content: $('#content').html()
    });

    $element.on('shown.bs.popover', function (e) {
        var popover = $element.data('bs.popover');
        if (typeof popover !== "undefined") {
            var $tip = popover.tip();
            zindex = $tip.css('z-index');

            $tip.find('.close').bind('click', function () {
                popover.hide();
            });

            $tip.mouseover(function (e) {
                $tip.css('z-index', function () {
                    return zindex + 1;
                });
            })
                .mouseout(function () {
                $tip.css('z-index', function () {
                    return zindex;
                });
            });
        }
    });
});

HTML:

<div class="container-fluid">
    <div class="well popover-demo col-md-12">
        <div class="page-header">
             <h3 class="page-title">Bootstrap 3.1.1 Popovers with a close button</h3>

        </div>
        <div class="btn-group">
            <button type="button" data-title="Popover One" class="btn btn-primary my-popover">Click me!</button>
            <button type="button" data-title="Popover Two" class="btn btn-primary my-popover">Click me!</button>
            <button type="button" data-title="Popover Three (and the last one gets a really long title!)" class="btn btn-primary my-popover">Click me!</button>
        </div>
    </div>
</div>
<div id="content" class="hidden">
    <button type="button" class="close">&times;</button>
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
</div>

CSS:

/* Make the well behave for the demo */
 .popover-demo {
    margin-top: 5em
}
/* Popover styles */
 .popover .close {
    position:absolute;
    top: 8px;
    right: 10px;
}
.popover-title {
    padding-right: 30px;
}

4

Tôi đã đấu tranh với cái này và đây là cách đơn giản nhất để làm điều đó, 3 dòng js:

  1. Thêm dấu thập vào tiêu đề của cửa sổ bật lên
  2. sử dụng đoạn mã js để hiển thị cửa sổ bật lên và để đóng bằng cách nhấp vào tiêu đề
  3. Sử dụng một chút css để làm cho nó đẹp

nhập mô tả hình ảnh ở đây

$(document).ready(function() {
  // This is to overwrite the boostrap default and show it allways
  $('#myPopUp').popover('show');
  // This is to destroy the popover when you click the title
  $('.popover-title').click(function(){
    $('#myPopUp').popover('destroy');
  });
});
@import "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css";

/* Just to align my example */
.btn {
  margin: 90px auto;
  margin-left: 90px;
}

/* Styles for header */
.popover-title {
  border: 0;
  background: transparent;
  cursor: pointer;
  display: inline-block;
  float: right;
  text-align: right; 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    
<button id="myPopUp" class="btn btn-success" data-toggle="popover" data-placement="top" data-title="×" data-content="lorem ipsum content">My div or button or something with popover</button>  
 


tại sao nút chéo không được điều hướng với tab?
Chandresh Mishra

3

Thử cái này:

$(function(){
  $("#example")
      .popover({
      title : 'tile',
      content : 'test'
    })
    .on('shown', function(e){
      var popover =  $(this).data('popover'),
        $tip = popover.tip();

      var close = $('<button type="button" class="close" aria-label="Close"><span aria-hidden="true">&times;</span></button>')
        .click(function(){
          popover.hide();
        });
      $('.popover-title', $tip).append(close);
    });
});

Thay vì thêm nút dưới dạng một chuỗi đánh dấu, sẽ dễ dàng hơn nhiều nếu bạn có một nút được bọc jQuery vì sau đó bạn có thể ràng buộc gọn gàng hơn nhiều. Điều này thực sự bị thiếu trong mã Bootstrap, nhưng giải pháp này phù hợp với tôi và thực sự có thể được mở rộng để áp dụng cho tất cả các cửa sổ bật lên nếu muốn.


Làm việc đối với tôi tốt nhất, chỉ cần tên update BS: 'thể hiện' -> 'shown.bs.popover' dữ liệu ( 'popover') -> Xóa dữ liệu ( 'bs.popover')
Ashot

2

Đây là một giải pháp "ăn gian":

Làm theo các hướng dẫn thông thường để có cửa sổ bật lên có thể loại bỏ.

Sau đó đánh dấu 'X' vào ô bằng CSS.

CSS:

.popover-header::after {
    content: "X";
    position: absolute;
    top: 1ex;
    right: 1ex;
}

JQUERY:

$('.popover-dismiss').popover({
    trigger: 'focus'
});

HTML:

<a data-toggle="popover" data-trigger="focus" tabindex="0"  title="Native Hawaiian or Other Pacific Islander" data-content="A person having origins in any of the original peoples of Hawaii, Guam, Samoa, or other Pacific Islands.">?</a>

Về mặt kỹ thuật, điều đó làm cho nó có thể bị loại bỏ nếu ai đó nhấp vào thứ gì đó không phải là "X" nhưng đó không phải là vấn đề trong kịch bản của tôi ít nhất.


1
$popover = $el.popover({
  html: true
  placement: 'left'
  content: 'Do you want to a <b>review</b>? <a href="#" onclick="">Yes</a> <a href="#">No</a>'
  trigger: 'manual'
  container: $container // to contain the popup code
});

$popover.on('shown', function() {
  $container.find('.popover-content a').click( function() {
    $popover.popover('destroy')
  });
});

$popover.popover('show')'

1
$(function(){ 
  $("#example").popover({
    placement: 'bottom',
    html: 'true',
    title : '<span class="text-info"><strong>title!!</strong></span> <button type="button" id="close" class="close">&times;</button></span>',
    content : 'test'
  })

  $(document).on('click', '#close', function (evente) {
    $("#example").popover('hide');
  });
  $("#close").click(function(event) {
    $("#example").popover('hide');
  });
});

<button type="button" id="example" class="btn btn-primary" >click</button>

1
    $('.tree span').each(function () {
        var $popOverThis = $(this);
        $popOverThis.popover({
            trigger: 'click',
            container: 'body',
            placement: 'right',
            title: $popOverThis.html() + '<button type="button" id="close" class="close" ">&times;</button>',
            html: true,
            content: $popOverThis.parent().children("div.chmurka").eq(0).html()
        }).on('shown.bs.popover', function (e) {
            var $element = $(this);
            $("#close").click(function () {
                $element.trigger("click");
            });
        });
    });

Khi bạn nhấp vào phần tử và hiển thị cửa sổ bật lên của mình, tiếp theo, bạn có thể nâng sự kiện show.bs.popover lên nơi bạn nhận được phần tử trong đó kích hoạt nhấp chuột để đóng cửa sổ bật lên của bạn.


1

FWIW, đây là giải pháp chung mà tôi đang sử dụng. Tôi đang sử dụng Bootstrap 3, nhưng tôi nghĩ cách tiếp cận chung cũng nên hoạt động với Bootstrap 2.

Giải pháp cho phép cửa sổ bật lên và thêm nút 'đóng' cho tất cả cửa sổ bật lên được xác định bởi thẻ 'rel = "popover"' bằng cách sử dụng một khối mã JS chung. Khác với yêu cầu (tiêu chuẩn) là có thẻ rel = "popover", bạn có thể đặt một số lượng tùy ý các cửa sổ bật lên trên trang và bạn không cần biết ID của chúng - thực tế là chúng không cần ID ở tất cả. Bạn cần sử dụng định dạng thẻ HTML 'data-title' để đặt thuộc tính tiêu đề của các cửa sổ bật lên và đặt data-html thành "true".

Mẹo mà tôi thấy cần thiết là xây dựng một bản đồ được lập chỉ mục của các tham chiếu đến các đối tượng bật lên ("po_map"). Sau đó, tôi có thể thêm một trình xử lý 'onclick' qua HTML tham chiếu đến đối tượng popover thông qua chỉ mục mà JQuery cung cấp cho tôi cho nó ("p_list ['+ index +']. Popover (\ 'toggle \')"). Bằng cách đó, tôi không cần phải lo lắng về id của các đối tượng bật lên, vì tôi có một bản đồ tham chiếu đến chính các đối tượng với một chỉ mục duy nhất do JQuery cung cấp.

Đây là javascript:

var po_map = new Object();
function enablePopovers() {
  $("[rel='popover']").each(function(index) {
    var po=$(this);
    po_map[index]=po;
    po.attr("data-title",po.attr("data-title")+
    '<button id="popovercloseid" title="close" type="button" class="close" onclick="po_map['+index+'].popover(\'toggle\')">&times;</button>');
    po.popover({});
  });
}
$(document).ready(function() { enablePopovers() });

giải pháp này cho phép tôi dễ dàng đặt nút đóng trên tất cả các cửa sổ bật lên trên toàn bộ trang web của tôi.



0

Cố định khi di chuột, HTML:

<a href="javascript:;" data-toggle="popover" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus." title="Lorem Ipsum">...</a>

Javascript:

$('[data-toggle=popover]').hover(function(e) {
  if( !$(".popover").is(':visible') ) {
      var el = this;
      $(el).popover('show');
      $(".popover > h3").append('<span class="close icon icon-remove"></span>')
                        .find('.close').on('click', function(e) {
                            e.preventDefault();
                            $(el).popover('hide');
                        }
      );
  }
});

0

Đặt cái này trong hàm tạo cửa sổ bật lên tiêu đề của bạn ...

'<button class="btn btn-danger btn-xs pull-right"
onclick="$(this).parent().parent().parent().hide()"><span class="glyphicon
glyphicon-remove"></span></button>some text'

... để có một nút 'x' nhỏ màu đỏ ở góc trên bên phải

//$('[data-toggle=popover]').popover({title:that string here})

0

Đối với bất kỳ ai vẫn còn một chút bối rối:

Đây là cách nó hoạt động để chuyển đổi cửa sổ bật lên sau khi bạn đã hiển thị nó, hãy chọn cùng một nút bạn đã sử dụng để kích hoạt nó và gọi .popover ('toggle') trên đó.

Trong trường hợp này, để đóng cửa sổ bật lên, mã sẽ là:

$ ('# ví dụ'). popover ('chuyển đổi');


0

Như một giải pháp rất đơn giản cho điều này, tôi đã làm như sau:

1) Thêm CSS sau:

.sub_step_info .popover::after {
    content:url('/images/cross.png');
    position:absolute;
    display:inline-block;
    top:15px;
    right:5px;
    width:15px;
    text-align:center;
    cursor:pointer;
}

2) Đặt data-trigger="manual"trên phần tử kích hoạt cửa sổ bật lên

3) Sau đó dựa trên https://github.com/twbs/bootstrap/issues/16802 :

$('[data-trigger="manual"]').click(function() {
    $(this).popover('toggle');
}).blur(function() {
    $(this).popover('hide');
}); 

Điều này sử dụng cơ sở rằng bất kỳ nơi nào trên cửa sổ bật lên đều có thể nhấp được nhưng bằng cách tập trung vào dấu chéo, bạn sẽ khuyến khích hành vi mà bạn đang theo đuổi.


0

Đối với tôi, đây là giải pháp đơn giản nhất để thêm nút đóng trong cửa sổ bật lên.

HTML:

    <button type="button" id="popover" class="btn btn-primary" data-toggle="popover" title="POpover" data-html="true">
                    Show popover
    </button>

    <div id="popover-content" style="display:none"> 
       <!--Your content-->
       <button type="submit" class="btn btn-outline-primary" id="create_btn">Create</button>
       <button type="button" class="btn btn-outline-primary" id="close_popover">Cancel</button>  
    </div>

Javascript:

    document.addEventListener("click",function(e){
        // Close the popover 
        if (e.target.id == "close_popover"){
                $("[data-toggle=popover]").popover('hide');
            }
    });

0

Tôi đã gặp phải vấn đề chú giải công cụ thực hiện một số nội dung thú vị khi nút đóng được nhấp. Để giải quyết vấn đề này, tôi đã sử dụng một spanthay vì sử dụng một nút. Ngoài ra, khi nút đóng được nhấp vào, tôi sẽ phải nhấp vào chú giải công cụ hai lần sau khi nó đóng để làm cho nó mở lại. Để giải quyết vấn đề này, tôi chỉ cần sử dụng .click()phương pháp, như được thấy bên dưới.

<span tabindex='0' class='tooltip-close close'>×</span>

$('#myTooltip').tooltip({
    html: true,
    title: "Hello From Tooltip",
    trigger: 'click'
});    

$("body").on("click", ".tooltip-close", function (e) {
    else {
        $('.tooltip').remove();
        $('#postal-premium-tooltip').click();
    }
});

0

Đây là giải pháp hoạt động dựa trên câu trả lời @Chris ở trên, nhưng đã được khắc phục để khi các nhấp chuột tiếp theo vào phần tử trình kích hoạt, bạn không phải nhấp vào phần tử hai lần.

Việc sử dụng .popover('hide)thủ công sẽ làm rối loạn trạng thái nội bộ của bootstraps, như đã lưu ý trong các nhận xét.

var closePopover = function(eventShown) {
   // Set the reference to the calling element
   var $caller = $('#' + this.id);

   // Set the reference to the popover
   var $popover = $('#' + $(eventShown.target).attr('aria-describedby'));

       // Unbind any pre-existing event handlers to prevent duplicate clicks
       $popover.find('.popover-close').off('click');

       // Bind event handler to close button
       $popover.find('.popover-close').on('click', function(e) {

          // Trigger a click on the calling element, to maintain bootstrap's internal state
          $caller.trigger('click');
        });
 }

$('.popoverTriggerElement').popover({
   trigger: 'click'
})
.on('shown.bs.popover', closePopover)

Bây giờ, bạn có thể sử dụng nút đóng mà không cần sao chép các sự kiện nhấp chuột và luôn kiểm tra trạng thái nội bộ của bootstraps để nó hoạt động như mong đợi.


-2
<script type="text/javascript"  src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <script type="text/javascript" src="jquery.popover-1.1.2.js"></script>

<script type="text/javascript">
$(function(){ 
$("#example").popover({
        placement: 'bottom',
        html: 'true',
        title : '<span class="text-info"><strong>title</strong></span> <button     type="button" id="close" class="close">&times;</button></span>',
        content : 'test'
    })


$("#close").click(function(event) {

$("#example").popover('hide');
});
});
</script>

<button type="button" id="example" class="btn btn-primary" >click</button>

2
Sry, nhưng điều đó sẽ không bao giờ hiệu quả. #closechỉ tồn tại khi cửa sổ bật lên hoạt động, clickkhông bao giờ bị ràng buộc. Thử alert($("#close").length);(nó cảnh báo 0)
davidkonrad
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.