【问题标题】:How can i close a bootstrap-popover with a button inside the popover?如何使用弹出框内的按钮关闭引导弹出框?
【发布时间】:2013-04-20 00:57:05
【问题描述】:

我创建了一个jsFiddle,在其中我在一个图标上使用了 twitter 引导弹出功能。

<div style="margin-top:200px">
    <ul>
        <li class="in-row">
            <a href="#" id="meddelanden" data-title="Meddelanden" data-toggle="clickover" 
            data-placement="right"><i class="icon-globe"></i></a>
        </li>
    </ul>
</div>

jquery:

var elem = '<div class="well"><a href="google.com">Message one, From someone.</a></div>'+
    '<div class="well"><a href="google.com">Message one, From someone.</a></div>'+
    '<button id="close-popover" class="btn btn-small btn-primary pull-right">Close please!</button>';

$('#meddelanden').popover({animation:true, content:elem, html:true});

我似乎无法使用其中的按钮关闭弹出框。我尝试在 id“close-popover”上创建一个 jquery click 函数,但注意到发生了。 (我没有在 jsfiddle 中尝试关闭它)

关于如何使用弹出框内的按钮关闭弹出框有什么建议吗?

问候, 比尔

【问题讨论】:

    标签: javascript jquery html css twitter-bootstrap


    【解决方案1】:

    试试这个:- http://jsfiddle.net/6hkkk/

    var elem = '<div class="well"><a href="google.com">Message one, From someone.</a></div>'+
        '<div class="well"><a href="google.com">Message one, From someone.</a></div>'+
        '<button id="close-popover" data-toggle="clickover" class="btn btn-small btn-primary pull-right" onclick="$(&quot;#meddelanden&quot;).popover(&quot;hide&quot;);">Close please!</button>';
    
    
    
    $('#meddelanden').popover({animation:true, content:elem, html:true});
    

    【讨论】:

    • 谢谢!这就像一个魅力,而其他建议都没有。我非常感谢您的帮助! /比尔
    • 没问题,很高兴它对解决您的问题有所帮助... :)
    • 更好的方法是将类“close”添加到按钮并添加此处理程序以进行关闭操作: $(document).on("click", ".popover .close" , function( ) { $(this).parents(".popover").popover('hide'); });
    • 这看起来是一个完美的解决方案,但想知道如果我将代码放在指令中并且可以常用它会怎样。由于我在 Ang 中有类似的要求,并且我已将代码放入指令中,popover 运行良好,但只有关闭事件失败,任何链接/建议都会有很大帮助。
    【解决方案2】:

    点击一下怎么样:

    <button onclick="$('#meddelanden').popover('hide');" class="btn btn-small btn-primary pull-right">Close please!</button>
    

    或者一个函数怎么样:

    <button onclick="close_please();" class="btn btn-small btn-primary pull-right">Close please!</button>
    

    与...

    function close_please() {
        $('#meddelanden').popover('hide');
    }
    

    或者在按钮创建后如何绑定它。

    $('#meddelanden').popover({animation:true, content:elem, html:true});
    $('#close-popover').bind('click', function(){
        $('#meddelanden').popover('hide');
    });
    

    【讨论】:

      【解决方案3】:

      前面的例子有两个主要缺点:

      1. “关闭”按钮需要以某种方式了解所引用元素的 ID。
      2. 需要在“shown.bs.popover”事件上添加一个“点击”监听器到关闭按钮;这也不是一个好的解决方案,因为每次显示“popover”时,您都会添加这样的监听器。

      下面是一个没有这些缺点的解决方案。

      默认情况下,'popover' 元素会立即插入 DOM 中的引用元素之后(然后请注意,引用元素和弹出框是直接兄弟元素)。因此,当单击“关闭”按钮时,您可以简单地查找其最近的“div.popover”父元素,然后查找该父元素的前一个兄弟元素。

      只需在“关闭”按钮的“onclick”处理程序中添加以下代码:

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

      示例:

      var genericCloseBtnHtml = '<button onclick="$(this).closest(\'div.popover\').prev().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'
      });
      

      【讨论】:

      • 据我所知,如果您设置 data-container 以使弹出框不在其触发按钮旁边(在我的情况下,我将 data-container="body" 设置为使其显示在触发器容器上方)。有没有办法在所有情况下实际检索弹出框?
      【解决方案4】:

      试试这个:

      <input type="button" onclick="$(this).parent().hide();" value="close">
      

      通过传递 $(this) 你引用的按钮和父引用按钮所在的元素

      【讨论】:

      • 我编辑了..语法错误..这应该通过关闭按钮的父元素来工作
      • 不幸的是,这并没有成功。它不会关闭所有弹出框(只有它是父级,而不是标题等)。您也无法恢复弹出窗口,再次单击该图标。
      • dam 我没有看到你的 jfiddle 链接但是是的.. $('#meddelanden').popover('hide');是要走的路..你应该接受 jon__o 作为答案
      【解决方案5】:

      点击时不调用函数的替代方案:

      Javascript

      var $popoverParent = $('.popover-parent').popover();
      
      //allow to close when close button clicked
      //register listener before popover shown
      $popoverParent.on('shown.bs.popover', function()
      {
          //get the actual shown popover
          var $popover = $(this).data('bs.popover').tip();
      
          //find the close button
          var $closeButton = $popover.find('.close-btn');
      
          $closeButton.click(function(){
              $popoverParent.popover('hide');
          });
      });
      
      //show your popover
      $popoverParent.popover('show');
      

      【讨论】:

        【解决方案6】:

        如果弹出框不知道引用元素的 ID,或者如果它直接位于主体下方,则可以使用 aria- describeby。

        $('#close-popover').click(function () {
          var id = $(this).closest('.popover').attr('id');
          var toggler = $('*[aria-describedby="' + id + '"]');
          toggler.popover('hide');
        });

        【讨论】:

          【解决方案7】:

          我的网站上有很多弹出框,它们都有相同的自定义标题栏,所以它们都有相同的关闭按钮。因此,我无法将 ID 传递给 onclick 处理程序。相反,我决定搜索打开的弹出框(一次只能打开一个),然后将其关闭。

          function closeMe() {
            $( document ).find('.popoverIsOpen').popover( 'hide' );
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-12-28
            • 1970-01-01
            • 2014-02-26
            • 2012-12-21
            • 2013-11-10
            • 2015-09-05
            • 2018-01-06
            • 1970-01-01
            相关资源
            最近更新 更多