【问题标题】:onclick event inside bootstrap popover引导弹出框内的 onclick 事件
【发布时间】:2018-10-22 04:50:51
【问题描述】:

inbox 按钮被点击时,它会运行 inbox_open() 函数 并在收件箱标题中出现 3 个按钮,但缺少 onclick 事件侦听器。 在// inbox.open 注释后检查代码,关键行:b.onclick = function() { console.log("button was clicked"); }inbox.setAttribute("title", poH.innerHTML);

// inbox
var inbox = document.getElementById("inbox");
var inbox_news = document.getElementById("inbox_news");

var poH = document.createElement("span");
var poC = document.createElement("span");

var new_from_to = [0, 2, 3];
var number_of_news = [2, 1, 2];
var news_price_data = [10, 20, 30, 40, 50];

// inbox.open
function inbox_open() {
  for (var i = 0; i < number_of_news.length; i++) {
    var b = document.createElement("button");
    b.innerHTML = (i + 1);
    b.className = "poH";
    b.onclick = function() {
      console.log("button clicked");
    }
    poH.appendChild(b);
  }
  inbox.setAttribute("title", poH.innerHTML);
}

// inbox.addEventListener
inbox.onclick = inbox_open();

// aloud BS 4 popover to run
$(document).ready(function() {
  $('[data-toggle="popover"]').popover();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">

<!-- HTML -->
<button id="inbox" class="btn btn-primary btn-sm" style="float: right; margin: 30px 30px 0 0;" data-toggle="popover" data-placement="left" data-html="true" title="" data-content="">inbox <span id="inbox_news"></span></button>

【问题讨论】:

  • 朋友你有什么问题?如何帮助您?

标签: javascript jquery css html bootstrap-4


【解决方案1】:

问题在于 onclick 函数没有绑定到按钮,这仅仅是因为 Bootstrap 的弹出框的工作方式。当按钮变得可见时,您可以添加以下几行来添加 onclick 侦听器:

$('#inbox').on('shown.bs.popover', function () {

    var btns = document.getElementsByClassName("poH");
    for (var i=0; i < btns.length; i++) {
        btns[i].onclick = function() { console.log("shit"); };
    }

});

只需在 $(document).ready(...) 行之后添加以上内容即可。

【讨论】:

    【解决方案2】:

    Bootstrap 防止任何元素的弹出内容上的 onclick 事件。因此,当您找到shown.bs.popover 的事件并尝试绑定onclick 时,它也会尝试阻止该元素的点击行为。下面是可以帮助您触发弹出内容的 onclick 事件的代码:

    var inbox = document.getElementById("inbox");
    var inbox_news = document.getElementById("inbox_news");
    
    var poH = document.createElement("span");
    var poC = document.createElement("span");
    
    var new_from_to = [0, 2, 3];
    var number_of_news = [2, 1, 2];
    var news_price_data = [10, 20, 30, 40, 50];
    
    // inbox.open
    function inbox_open() {
      for (var i = 0; i < number_of_news.length; i++) {
        var b = document.createElement("button");
        b.innerHTML = (i + 1);
        b.className = "poH";
        b.click = function() {
          console.log("button clicked");
        }
        poH.appendChild(b);
      }
      inbox.setAttribute("title", poH.innerHTML);
    }
    
    // inbox.addEventListener
    inbox.onclick = inbox_open();
    
    $(document).ready(function() {
      $('[data-toggle="popover"]').popover();
      
      $('#inbox').on('shown.bs.popover', function () {
        for (var i=0; i < $('.poH').length; i++) {
            $('.poH')[i].onclick = function() { alert($(this).text()); };
        }
      });
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
    
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">
    
    <!-- HTML -->
    <button id="inbox" class="btn btn-primary btn-sm" style="float: right; margin: 30px 30px 0 0;" data-toggle="popover" data-placement="left" data-html="true" title="" data-content="">inbox <span id="inbox_news"></span></button>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-15
      • 1970-01-01
      • 1970-01-01
      • 2017-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多