4

<select>変更時にdivを非表示/表示するように使用しようとしています。

Twitterのブートストラップ崩壊プラグインを利用したいです。

私はこの例で半分働いています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

4

3 に答える 3

4

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>返すため、ユーザーがドロップダウンを変更したときに影響を受けるはずのアコーディオンへの参照を詰め込みました。valueoption<a>

参照を取得したら、その項目でクリック イベントをトリガーするだけです。もう 1 つの重要な点は、ページが読み込まれたときに、アコーディオンが の現在の状態を反映するようにするselectことです。optionselected="selected"

最後に、双方向制御があります。ユーザーが を変更する<select>と、アコーディオンが変更されるため、アコーディオンをクリックすると が変更されることが期待され<select>ます。

お役に立てれば。

于 2013-03-13T16:31:05.557 に答える
2

まず、私は少し怠惰です。JavaScript、HTML、CSSを追加しました。

ここでデモを表示します。

1つまたは2つのバグがあります。私はそれらを修正しようとします。

于 2013-03-05T19:32:03.410 に答える
0

これは私にとってはうまくいきました(実際の例については、このjsFiddleを参照してください):

HTML

...
<select class="custom-select custom-select--collapse" aria-label="Select option to collapse">
    <option value="" selected data-target=".collapse.show">-- Choose something --</option>
    <option value="Collapse 1" data-target="#collapse1">Collapse 1</option>
    ...
</select>
...

...
<div class="collapse mb-3" id="collapse1">Content Collapse 1</div>
<div class="collapse mb-3" id="collapse2">Content Collapse 2</div>
...

Jクエリ

// DEFINE TARGET
var target; 

// SELECT OPTION TO SHOW/HIDE COLLAPSIBLE CONTENT
$('.custom-select--collapse').on('change' , function() {
    
    $('.custom-select--collapse option').each(function() {
      if ( $(this).is(':selected') ) {
        // ASSIGN TARGET
        target = $(this).attr("data-target");
      }
      
      // HIDE ALL CONTENT IF SELECTED OPTION HAS NO VALUE
      if ( $(this).val() == "" ){
        $(target).collapse('hide');
      }else{
        $(target).collapse('toggle');
      }
  });
  
  console.log("TARGET = " + target);        
});
于 2021-10-07T08:55:25.330 に答える