【问题标题】:Twitter Bootstrap: How to close modal / popover programmatically with jQueryTwitter Bootstrap:如何使用 jQuery 以编程方式关闭模式/弹出框
【发布时间】:2012-10-09 19:54:24
【问题描述】:

我正在使用 jquery 引导下拉菜单。我在下拉列表中添加了一些输入文本,现在我尝试提交时想要做什么,它必须关闭下拉列表。有什么办法吗?

这是来自 twitter bootstrap 的 url 演示: http://twitter.github.com/bootstrap/javascript.html#dropdowns

!function ($) {

  var toggle = '[data-toggle=dropdown]'
, Dropdown = function (element) {
    var $el = $(element).on('click.dropdown.data-api', this.toggle)
    $('html').on('click.dropdown.data-api', function () {
      $el.parent().removeClass('open')
    })
  }

Dropdown.prototype = {

constructor: Dropdown

  , toggle: function (e) {
  var $this = $(this)
    , $parent
    , isActive

  if ($this.is('.disabled, :disabled')) return

  $parent = getParent($this)

  isActive = $parent.hasClass('open')

  clearMenus()

  if (!isActive) {
    $parent.toggleClass('open')
    $this.focus()
  }

  return false
}

  , keydown: function (e) {
  var $this
    , $items
    , $active
    , $parent
    , isActive
    , index

  if (!/(38|40|27)/.test(e.keyCode)) return

  $this = $(this)

  e.preventDefault()
  e.stopPropagation()

  if ($this.is('.disabled, :disabled')) return

  $parent = getParent($this)

  isActive = $parent.hasClass('open')

  if (!isActive || (isActive && e.keyCode == 27)) return $this.click()

  $items = $('[role=menu] li:not(.divider) a', $parent)

  if (!$items.length) return

  index = $items.index($items.filter(':focus'))

  if (e.keyCode == 38 && index > 0) index--                                        // up
  if (e.keyCode == 40 && index < $items.length - 1) index++                        // down
  if (!~index) index = 0

  $items
    .eq(index)
    .focus()
}



}

  function clearMenus() {
getParent($(toggle))
  .removeClass('open')


}

  function getParent($this) {
var selector = $this.attr('data-target')
  , $parent

if (!selector) {
  selector = $this.attr('href')
  selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
}

$parent = $(selector)
$parent.length || ($parent = $this.parent())

return $parent


 }


  $.fn.dropdown = function (option) {
return this.each(function () {
  var $this = $(this)
    , data = $this.data('dropdown')
  if (!data) $this.data('dropdown', (data = new Dropdown(this)))
  if (typeof option == 'string') data[option].call($this)
})
  }

  $.fn.dropdown.Constructor = Dropdown



  $(function () {
$('html')
  .on('click.dropdown.data-api touchstart.dropdown.data-api', clearMenus)
$('body')
  .on('click.dropdown touchstart.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
  .on('click.dropdown.data-api touchstart.dropdown.data-api'  , toggle, Dropdown.prototype.toggle)
  .on('keydown.dropdown.data-api touchstart.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)
  })

}(window.jQuery);

【问题讨论】:

    标签: jquery twitter-bootstrap


    【解决方案1】:

    用于引导模式

    试试$('#myModal').modal('hide')

    用于引导弹出窗口

    我刚刚看到你在谈论 bootstrap dropdown 而不是引导模式:

    在这种情况下,您的方法还不错,只需删除父元素的开放类即可。 在上面链接的示例中,第一个下拉元素的 id 为“drop3”, 所以要以编程方式关闭它,你可以这样做:

    $('#drop3').parent().removeClass("open");
    

    【讨论】:

    • 您好弗兰克,感谢您的回复。那么我在哪里可以将函数放入我的代码中?
    • 这真是乱七八糟的代码,但我猜你想要的是 if (!isActive) { $parent.addClass('open') $this.focus() } else { $parent.removeClass('打开') }
    【解决方案2】:

    要关闭引导程序modal,您可以使用 'hide' 作为模态方法的选项,如下所示

     $('#modal').modal('hide');
    

    请看看工作fiddle here

    【讨论】:

      【解决方案3】:

      顺便说一句;您还可以触发关闭按钮单击模态的close 按钮,如下所示:

      $('.close').click();
      

      更新

      上面的方法可能有点hacky,所以你最好使用默认的Bootstrap modal方法

      $('#modal-id').modal('hide');
      

      【讨论】:

      • 推荐使用框架的原生方法
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-24
      • 1970-01-01
      • 2012-06-12
      • 2017-10-14
      • 2014-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多