我试图弄清楚如何通过手动单击来配置多个 twitter 引导程序的弹出窗口。
但首先,一些代码:
# 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
弹出框正文中的此请求。
如果单击弹出框,我想发生什么:
- 打开弹窗(服务器响应后)
- 不要滚动到页面顶部
- 如果我单击弹出框的主体,请不要关闭(那里有一些链接)
- 关闭上一个弹出框(如果打开)
如果我点击其他任何地方:
- 关闭上一个弹出框(如果打开)
问题:
- 如果我单击弹出框,它将滚动到页面顶部(典型的点击传播)
- 如果我重新单击相同的链接打开弹出框,该弹出框将被破坏并且无法再次打开它。它会在之后立即打开和关闭。
我试过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 位不会被触发。应该关闭其他弹出窗口的那个。单击其他任何地方当然可以。