jquery - 修改折叠插件以使用 select = selected

标签 jquery html twitter-bootstrap

我正在尝试使用 <select>以便在更改时隐藏/显示一个 div。

我想使用 Twitter Bootstrap 折叠插件。

我已经完成了这个例子的一半 http://plnkr.co/edit/9lPe61?p=preview

但是当你添加 selected选择它会破坏一切:http://plnkr.co/edit/w9XW8R?p=preview

<div class="accordion" id="accordion" >
    <div class="accordion-group">
      <select class="accordion-toggle">
         <option value="1" data-toggle="collapse" data-parent="#accordion" data-target="#collapseOne">1</option>
         <option value="2" data-toggle="collapse" data-parent="#accordion" data-target="#collapseTwo">2</option>
         <option value="3" data-toggle="collapse" data-parent="#accordion" data-target="#collapseThree">3</option>
      </select>

      <div id="collapseOne" class=" collapse in">
        <div class="accordion-inner">
          Anim1 pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
        </div>
      </div>
    </div>
    <div class="accordion-group">
      <div id="collapseTwo" class=" collapse">
        <div class="accordion-inner">
          Anim2 pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
        </div>
      </div>
    </div>
    <div class="accordion-group">
      <div id="collapseThree" class=" collapse">
        <div class="accordion-inner">
          Anim3 pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
        </div>
      </div>
    </div>
</div>

JS - 我想我需要添加到插件中以检查是否有 selected="selected"这样它也可以与选择一起使用,但我无法弄清楚它需要去哪里?

/* =============================================================
 * bootstrap-collapse.js v2.3.1
 * http://twitter.github.com/bootstrap/javascript.html#collapse
 * =============================================================
 * Copyright 2012 Twitter, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * ============================================================ */


!function ($) {

  "use strict"; // jshint ;_;


 /* COLLAPSE PUBLIC CLASS DEFINITION
  * ================================ */

  var Collapse = function (element, options) {
    this.$element = $(element)
    this.options = $.extend({}, $.fn.collapse.defaults, options)

    if (this.options.parent) {
      this.$parent = $(this.options.parent)
    }

    this.options.toggle && this.toggle()
  }

  Collapse.prototype = {

    constructor: Collapse

  , dimension: function () {
      var hasWidth = this.$element.hasClass('width')
      return hasWidth ? 'width' : 'height'
    }

  , show: function () {
      var dimension
        , scroll
        , actives
        , hasData

      if (this.transitioning || this.$element.hasClass('in')) return

      dimension = this.dimension()
      scroll = $.camelCase(['scroll', dimension].join('-'))
      actives = this.$parent && this.$parent.find('> .accordion-group > .in')

      if (actives && actives.length) {
        hasData = actives.data('collapse')
        if (hasData && hasData.transitioning) return
        actives.collapse('hide')
        hasData || actives.data('collapse', null)
      }

      this.$element[dimension](0)
      this.transition('addClass', $.Event('show'), 'shown')
      $.support.transition && this.$element[dimension](this.$element[0][scroll])
    }

  , hide: function () {
      var dimension
      if (this.transitioning || !this.$element.hasClass('in')) return
      dimension = this.dimension()
      this.reset(this.$element[dimension]())
      this.transition('removeClass', $.Event('hide'), 'hidden')
      this.$element[dimension](0)
    }

  , reset: function (size) {
      var dimension = this.dimension()

      this.$element
        .removeClass('collapse')
        [dimension](size || 'auto')
        [0].offsetWidth

      this.$element[size !== null ? 'addClass' : 'removeClass']('collapse')

      return this
    }

  , transition: function (method, startEvent, completeEvent) {
      var that = this
        , complete = function () {
            if (startEvent.type == 'show') that.reset()
            that.transitioning = 0
            that.$element.trigger(completeEvent)
          }

      this.$element.trigger(startEvent)

      if (startEvent.isDefaultPrevented()) return

      this.transitioning = 1

      this.$element[method]('in')

      $.support.transition && this.$element.hasClass('collapse') ?
        this.$element.one($.support.transition.end, complete) :
        complete()
    }

  , toggle: function () {
      this[this.$element.hasClass('in') ? 'hide' : 'show']()
    }

  }


 /* COLLAPSE PLUGIN DEFINITION
  * ========================== */

  var old = $.fn.collapse

  $.fn.collapse = function (option) {
    return this.each(function () {
      var $this = $(this)
        , data = $this.data('collapse')
        , options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option)
      if (!data) $this.data('collapse', (data = new Collapse(this, options)))
      if (typeof option == 'string') data[option]()
    })
  }

  $.fn.collapse.defaults = {
    toggle: true
  }

  $.fn.collapse.Constructor = Collapse


 /* COLLAPSE NO CONFLICT
  * ==================== */

  $.fn.collapse.noConflict = function () {
    $.fn.collapse = old
    return this
  }


 /* COLLAPSE DATA-API
  * ================= */

  $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) {
    var $this = $(this), href
      , target = $this.attr('data-target')
        || e.preventDefault()
        || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
      , option = $(target).data('collapse') ? 'toggle' : $this.data()
    $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
    $(target).collapse(option)
  })

}(window.jQuery);

http://plnkr.co/edit/w9XW8R?p=preview

最佳答案

OP,

我觉得这个http://plnkr.co/edit/qfB8Uf?p=preview是你所追求的。


重要的部分

JS

...
  $('document').ready(function () {
      $(".accordion-dropdpwn").on('change', function (e) {
          var selected_value = $(this).val(),
          $target_elem = $('a[href="' + selected_value + '"]');
          $target_elem.trigger('click');
      });

      $('.accordion-toggle').on('click', function () {
          var selected_value = $(this).attr('href');
          $(".accordion-dropdown option").removeAttr('selected');
          $('option[value="' + selected_value + '"]').attr('selected', 'selected');
      });

      $(".accordion-dropdown").trigger('change');
  });

...

简介

change <select> 的事件返回 value所选 option ( child ),我塞进了 Accordion 的引用<a>当用户更改下拉菜单时应该会受到影响。

获得引用后,我们只需触发该项目的点击事件。另一个重要的一点是确保在加载页面时, Accordion 将反射(reflect) select 的当前状态。 — 即以 option 为准有selected="selected"将开放/活跃。

最后,还有双向控制。因为如果用户更改 <select> , Accordion 改变了,预计点击 Accordion 应该改变 <select> .

希望这对您有所帮助。

关于jquery - 修改折叠插件以使用 select = selected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15231707/

相关文章:

html - 声明 div 时编辑 CSS 类

html - 如何禁用 HTML5 视频标签搜索?

javascript - Bootstrap 模式关联目标未定义

html - Bootstrap 水平导航栏在 Internet Explorer 中崩溃

javascript - 使用 jQuery 的 .show() 显示内容时遇到问题

javascript - 结合href Bootstrap自动执行数据切换

javascript - Webix 数据表 ||加载数据服务器端

jQuery 对话框背景更改

javascript - 在 jQuery 中显示/隐藏 Div

javascript - 我可以通过 <b> 标签过滤返回的 JSON 吗?