【问题标题】:Click in popover not working单击弹出窗口不起作用
【发布时间】:2018-12-17 05:14:39
【问题描述】:

我尝试使用此代码在a 标记上的click 事件后获取data-lang 值:

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

$('.popover-body').on('click', 'a', function() {
  let lang = $(this).data("lang")
  alert(lang);
});
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<nav class="mainnav">
  <ul class="topnav">
    <a href="#" data-toggle="popover" data-popover-content="#a1">Popover</a>
  </ul>
</nav>
<div id="a1" class="hidden">
  <div class="popover-heading">_('Välj ditt språk')</div>
  <div class="popover-body">
    <div class="lang">
      <a href="#" data-lang="no">Norsk</a>
    </div>
    <div>
      <a href="#" data-lang="de">Deutsch</a>
    </div>
    <div>
      <a href="#" data-lang="nl">Nederlands</a>
    </div>
    <div>
      <a href="#" data-lang="es">Español</a>
    </div>
    <div>
      <a href="#" data-lang="dk">Dansk</a>
    </div>
  </div>
</div>

但是当我点击它时,什么也没有发生。
我该如何解决这个问题?

【问题讨论】:

    标签: javascript jquery twitter-bootstrap popover


    【解决方案1】:

    问题是因为尽管您使用的是委托事件处理程序,这是解决此问题的正确方法,但插件不会将 .popover-body 元素与弹出框的内容一起克隆。如果您在打开弹出框后检查 DOM 中的元素,就可以看到这一点。

    要解决此问题,您可以使用 .mainnav 元素作为委托事件处理程序的主要选择器:

    $("[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();
      }
    });
    
    $('.mainnav').on('click', '.topnav div a', function() { // change this
      let lang = $(this).data("lang")
      console.log(lang);
    });
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    
    <nav class="mainnav">
      <ul class="topnav">
        <a href="#" data-toggle="popover" data-popover-content="#a1">Popover</a>
      </ul>
    </nav>
    <div id="a1" class="hidden">
      <div class="popover-heading">_('Välj ditt språk')</div>
      <div class="popover-body">
        <div class="lang">
          <a href="#" data-lang="no">Norsk</a>
        </div>
        <div>
          <a href="#" data-lang="de">Deutsch</a>
        </div>
        <div>
          <a href="#" data-lang="nl">Nederlands</a>
        </div>
        <div>
          <a href="#" data-lang="es">Español</a>
        </div>
        <div>
          <a href="#" data-lang="dk">Dansk</a>
        </div>
      </div>
    </div>

    【讨论】:

    • 谢谢它的帮助!
    【解决方案2】:

    问题似乎出在选择器上。在弹出窗口打开时的源代码中,我看不到 popover-body 类。不过这应该可行:

    $("[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();
      }
    });
    
    $('body').on('click', '.popover-content a', function() {
      let lang = $(this).data("lang")
      alert(lang);
    });
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    
    <nav class="mainnav">
      <ul class="topnav">
        <a href="#" data-toggle="popover" data-popover-content="#a1">Popover</a>
      </ul>
    </nav>
    <div id="a1" class="hidden">
      <div class="popover-heading">_('Välj ditt språk')</div>
      <div class="popover-body">
        <div class="lang">
          <a href="#" data-lang="no">Norsk</a>
        </div>
        <div>
          <a href="#" data-lang="de">Deutsch</a>
        </div>
        <div>
          <a href="#" data-lang="nl">Nederlands</a>
        </div>
        <div>
          <a href="#" data-lang="es">Español</a>
        </div>
        <div>
          <a href="#" data-lang="dk">Dansk</a>
        </div>
      </div>
    </div>

    【讨论】:

      【解决方案3】:

      选择器“popover-body”存在问题,可能不存在。 看看JsFiddle:https://jsfiddle.net/xe54r7db/37/

          $("[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();
          }
        });
        //Register with document parent selector to attach event.
        $(document).on('click','.popover-content a',function(e){
       // e.preventDefault();
          let lang = $(this).data("lang")
          alert(lang);
        });
      

      【讨论】:

        【解决方案4】:

        .on() 方法将事件处理程序附加到 jQuery 对象中当前选定的元素集,我将类选择器更改为文档以将事件绑定到元素

        $(document).on('click', 'a', function() {
             let lang = $(this).data("lang")
             alert(lang);
        });
        

        【讨论】:

        • 感谢您可以在此问题中添加更多详细信息,以使其对将来返回此问题的人有用
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多