带有手动点击触发器的Twitter引导程序popover。防止违约

时间:2013-05-08 15:04:52

标签: javascript twitter-bootstrap popover

我正试图弄清楚如何通过手动点击配置多个twitter bootstrap的popovers。

但首先是一些代码:

# bootstrap.js.coffee
# this opens a popover with new server data
$('*[data-poload]').bind 'click', ->
  $this = $(this)
  $.get $this.data('poload'), (d) ->
    $this.popover
      content: d
      html: true
      title: $this.parents("tr").data("title")
    .popover 'show'

# this handles clicks everywhere on the page and decides what to do if it finds opened popovers
$("html").click (e) ->
  $('*[data-poload]').each ->
    $(this).popover "hide" if not ($(this).is(e.target) or $(this).has(e.target).length > 0) and $(this).siblings(".popover").length isnt 0 and $(this).siblings(".popover").has(e.target).length is 0

这是可以发现的链接。我在同一页面上有数百个具有不同data-poload属性的文件:

<a href="#" data-poload="/resources/some-id/popover">Text</a>

我的服务器将使用一些html响应此弹出框中的请求/resources/some-id/popover

如果点击一个popover,我想要发生什么:

  • 打开popover(服务器响应后)
  • 不要滚动到页面顶部
  • 如果我点击popover的正文(那里有一些链接),请不要关闭
  • 关闭上一个弹出窗口(如果已打开)

如果我点击其他地方:

  • 关闭上一个弹出窗口(如果已打开)

问题:

  • 如果我点击一个弹出窗口,它将滚动到页面顶部(典型的点击传播)
  • 如果我重新点击同一个链接打开popover,那个popover将被破坏,将无法再次打开它。它会立即打开和关闭。

我尝试了return false这样的

# bootstrap.js.coffee
$('*[data-poload]').bind 'click', ->
  $this = $(this)
  $.get $this.data('poload'), (d) ->
    $this.popover
      content: d
      html: true
      title: $this.parents("tr").data("title")
    .popover 'show'
  false

但这不起作用,因为下一个js位不会被触发。一个应该关闭其他popovers的人。点击其他地方的工作 当然。

0 个答案:

没有答案