5

我将以下内容放在 Twitter Bootstrap 弹出窗口中,其中包含一个我想监听点击的链接:

<div id="popover-content">
  <a id="link" href="#">click</a>
</div>

我正在使用一个按钮来显示包含上述内容的弹出框:

<button id="trigger" data-placement="bottom" title="title">Reveal popover</button>

然后,我将按钮与弹出框相关联,并使用 jQuery 的click()函数来尝试侦听对弹出框中包含的链接的点击:

$(function(){
  $('#trigger').popover({ 
    html: true,
    content: function() {
      return $('#popover-content').html();
    }
  }); 

  $('#link').click(function() {
    alert('beep');
  });
});

但是,在单击按钮以显示弹出框然后单击链接时,似乎未按上述预期检测到单击。我对 DOM、javascript 和 jQuery 的理解相当有限,所以我不确定这里发生了什么。如何选择/侦听对弹出框中包含的元素的操作?

参考:Bootstrap 中的弹出框

4

3 回答 3

7

您不需要在此处执行事件委托。设置内容时使用$('#popover-content')代替。$('#popover-content').html()这将默认附加注册的事件,而无需任何委托。

演示

$(function(){
  $('#trigger').popover({ 
    html: true,
    content: function() {
      return $('#popover-content'); //<-- Remove .html()
    }
  }); 

  $('#link').click(function() {
    alert('beep');
  });
});
于 2013-05-11T07:07:49.630 回答
2

你可以试试这个:

$(document).on('click', '#link', function(){
    alert('beep');
});
于 2013-05-11T06:56:54.730 回答
0

您可以手动使用弹出框:

html

<div id="popover-wrapper">
  <button id="trigger" data-placement="bottom" title="title">Reveal popover</button>
  <div class="popover right popup-area popover-pos">
    <div class="popover-content">
      <div id="popover-content">
        <a id="link" href="#">click</a>
      </div>
    </div>
  </div>
</div>

css

#popover-wrapper {
  .popover {
    left: auto;
    right: 0;
    width: 250px;
    top: 35px;

    .popover-content {
      // ..
    }
  }

  &.open .popover {
    display: block;
  }
}

js

  $('#trigger').hover(function() {
    $(this).stop(true, true).delay(250).queue(function(next){
      $(this).addClass('open');
      next();
    });
  }, function() {
      $(this).stop(true, true).delay(250).queue(function(next){
        $(this).removeClass('open');
        next();
      });
    }
  );
于 2014-05-30T02:04:29.460 回答