【问题标题】:Bootstrap popover hiding if not clicked above it如果未在其上方单击,则引导弹出窗口隐藏
【发布时间】:2016-03-14 14:47:57
【问题描述】:

这是我正在使用的代码

HTML

<!DOCTYPE html>
<html lang="en">
  <head>

    <title>Place Bid</title>

    <!-- Bootstrap -->
    <link href="../stylesheets/bootstrap.min.css" rel="stylesheet">
    <link href="popover.css" rel="stylesheet">

  </head>
  <body>

<div class="container">
  <ul class="list-unstyled">
    <button class ="bidpopover"><a data-placement="bottom" data-toggle="popover" data-title="Place Bid" data-container="body" type="button" data-html="true" href="#" id="bid">Place Bid</a></button>
    <div id="popover-content" class="hide">
      <form class="form-inline" role="form">
        <div class="form-group">
            <div class="input-group" type ="wage">
                <span class="input-group-addon">$</span>
                <input type="text" class="form-control"/>
            </div>
          <br><br>
          <button type="submit" class="btn btn-primary">Submit</button>    
          <button type="cancel" class="btn btn-primary">Cancel</button>                               
        </div>
      </form>
    </div>
  </ul>
</div>

    <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <!-- Include all compiled plugins (below), or include individual files as needed -->
    <script src="js/bootstrap.min.js"></script>
    <!-- Popover UI functionalities-->
    <script src="popover.js"></script>
  </body>
</html>

CSS

.grey-box     /* background of popover box*/
    {
        background-color: gray;
        height: 200px;
        margin-bottom: 10px;
        font-size: 2em;
        text-align: center;
        padding: 80px;
    }
  .form-control { /* popover text field*/
    width:120px;
  }
  .popover { /* popover responsiveness*/
    max-width:300px;
  }
  button[type="submit"]{ /* Submit button */
    border: 0;
    padding: 8px;
    background: #45AD00;
    color: white;
    border-radius: 5px;
    margin-left: 20px;
    margin-right: 30px;
  }
  button[type="cancel"]{ /* Cancel button */
    border: 0;
    padding: 8px;
    background: #FC3838;
    color: white;
    border-radius: 5px;
    margin-right: 20px;
  }
  .bidpopover{ /* Place Bid button*/
    margin-top: 50px;
    padding: 6px;
    -webkit-transition-duration: 0.4s;
    transition-duration: 0.4s;
    background-color: white;
    border: 2px solid #4CAF50;
    border-radius: 5px;

  }
   .bidpopover:hover { /* hovering over "Place Bid" button */
    background-color: #4CAF50;
    color: white;
  }

ANGULAR.JS*

    $( function() /* popover action */
    {
        $("[data-toggle=popover]").popover({
      html: true, 
      content: function() {
          return $('#popover-content').html();
        }
      });
    } );

    $('body').on('click', function (e) { /* closes popover when clicked outside of it */
    //only buttons
    if ($(e.target).data('toggle') !== 'popover'
        && $(e.target).parents('.popover.in').length === 0) { 
        $('[data-toggle="popover"]').popover('hide');
    }
});

我通过浏览器运行它,只有在弹出框上方完成鼠标单击时,弹出框才会起作用。另外,如果单击按钮上的任何位置而不仅仅是按钮标签,HTML 按钮是否能够正常工作?只有当鼠标点击发生在按钮标签所在的中间区域时,我的“竞价”按钮才会打开弹出框。

【问题讨论】:

  • 请提供您的代码minimal reproducible example。使用 sn-p 工具(&lt;&gt; 符号)编辑您的问题,链接所需的资源,以便我们可以在这里遇到问题。或者,您可以使用 jsFiddle 或 codepen 或其他在线 sn-p 工具。另外,我看到您正在声明您添加的脚本,这显然是 jQueryAngularJS。你没有在你的项目中包括,也没有使用AngularJSAngularJS 不是 JavaScript 的另一个名称。它是一个独特的库,具有不同的语法和不同的方法,您没有使用。

标签: html css angularjs twitter-bootstrap-3


【解决方案1】:

首先,不建议将&lt;a&gt;标签放在&lt;button&gt;s里面。
我将popover 功能转移到&lt;button&gt;。还有很多其他小问题,一些与HTML 标记有关,一些与CSS 有关,我清理并添加了前缀。

我还修复了您的 jQuery 代码中的一个逻辑错误,该错误阻止了在 popover 外部单击关闭弹出框后第一次单击时打开它。

并且我将弹出框箭头的颜色与弹出框标题的背景颜色相同(我一直不明白为什么它不是默认颜色,因为底部的弹出框开口总是有与其标题相邻的箭头。)

jsFiddle

干杯!

【讨论】:

  • 谢谢。你解决了这个问题,但是你做了太多的改变,以至于我无法很好地学习我犯的错误,因为我的代码中的所有内容都被修改了。
  • 至少现在你有我的版本和你的版本。如果您有时间,请在两者之间进行游戏,看看每个模块的作用。对每一个变化发表评论要比仅仅做更多的事情。从我的角度来看,我试图把它带到一个体面的“生产”水平。让我们说前端开发人员不是无偿支付的。 :)
  • 你能解释一下按钮只能在文本上点击的根本原因吗?对此最简单的解决方法是什么?感谢您花时间向我展示您的版本。我只是更喜欢在我现有的代码中进行简单的修复而不是彻底的大修,这样我就可以在将来应用这种做法。谢谢。
  • 只有当您单击&lt;a&gt; 标签时,弹出框才会打开,该标签受&lt;button&gt;padding 限制。如果您希望所有容器都充当链接,则需要将填充放在锚点上,而不是容器上。
  • 啊。明白了。我刚刚删除了&lt;a&gt; 标签并将所有属性放在解决问题的开始按钮标签下。我不需要这个按钮作为指向另一个 html 页面的超链接,所以我完全删除了锚。
猜你喜欢
  • 1970-01-01
  • 2022-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-24
  • 1970-01-01
相关资源
最近更新 更多