【问题标题】:jQuery Mobile Collapsible Sets, Open Multiple at Once?jQuery Mobile 可折叠集,一次打开多个?
【发布时间】:2014-12-26 14:15:30
【问题描述】:

是否可以使用 jQuery mobile 中的 Collapsible Set 小部件的样式,但它的功能与普通可折叠小部件一样(例如,允许在可折叠集中一次打开多个可折叠小部件)?

http://jquerymobile.com/demos/1.1.0/docs/content/content-collapsible-set.html

【问题讨论】:

标签: jquery jquery-mobile


【解决方案1】:

是的,这是可能的,但你必须像这样破解你的方式:

$('.YOUR_COLLAPSIBLE_CLASS.ui-collapsible.ui-collapsible-collapsed')
    .attr('data-collapsed',false).removeClass("ui-collapsible-collapsed")
    .find('.ui-collapsible-content').removeClass('ui-collapsible-content-collapsed');

您可以在一组中使用任意数量的可折叠项来执行此操作。不过,您必须以某种方式识别可折叠物品。

我在表单中执行此操作,因此我从错误的表单字段开始,并逐步进入可折叠集:

var el = my_faulty_form_field;

el.attr('placeholder', YOUR_ERROR_MSG)
    .closest('.ui-collapsible.ui-collapsible-collapsed')
      .attr('data-collapsed',false).removeClass("ui-collapsible-collapsed")
        .find('.ui-collapsible-content').removeClass('ui-collapsible-content-collapsed');

【讨论】:

    【解决方案2】:

    另一个使用小技巧但没有任何类属性操作的解决方案是声明一个扩展 collapsible-set 的新小部件并取消绑定不需要的事件处理程序。

    $.widget( "mobile.collapsiblegroup", $.mobile.collapsibleset, {
        options: {
            initSelector: ":jqmData(role='collapsible-group')"
        },
        _create: function() {
            $.mobile.collapsibleset.prototype._create.call(this);
            var $el = this.element;
            if (!$el.jqmData('collapsiblebound2')) {
                $el.jqmData('collapsiblebound2', true)
                    .unbind('expand')
                    .bind('expand', $._data($el.get(0), 'events')['collapse'][0]);
            }
        }
    });
    
    //auto self-init widgets
    $( document ).bind( "pagecreate create", function( e ) {
        $.mobile.collapsiblegroup.prototype.enhanceWithin( e.target );
    });
    

    要使用它,只需将data-role 更改为collapsible-group 而不是collapsible-set


    注意:这仅适用于 jQuery 1.8+,旧版本更改

    $._data($el.get(0), 'events')$el.data('events')

    【讨论】:

      【解决方案3】:

      对频繁回答的补充说明:

      $('.YOUR_COLLAPSIBLE_CLASS.ui-collapsible.ui-collapsible-collapsed')
          .attr('data-collapsed',false).removeClass("ui-collapsible-collapsed")
          .find('.ui-collapsible-content').removeClass('ui-collapsible-content-collapsed');
      

      我添加了这两行:

      $( '.YOUR_COLLAPSIBLE_CLASS h2' ).removeClass( 'ui-collapsible-heading-collapsed' );
      $( '.YOUR_COLLAPSIBLE_CLASS h2 a' ).removeClass( 'ui-icon-plus' ).addClass( 'ui-icon-minus' );
      

      【讨论】:

        【解决方案4】:

        您可以使用 Collapsibles 代替 Collapsible Set 或 Accordion。

        与“可折叠集”的不同之处在于可以同时打开多个可折叠行。

        【讨论】:

        • Aka,只是不要将您的可折叠设备包装在可折叠设备中。
        【解决方案5】:

        这可以通过在主事件完成后停止事件传播来完成。

        $('.collaps').bind('expand', function (evt) {
          evt.stopImmediatePropagation();
        })
        
        $('.collaps').bind('collapse', function (evt) {
          evt.stopImmediatePropagation();
        });
        

        collaps 是您赋予集合中所有可折叠项的类的名称。 然后打开和关闭一个不影响其余的。

        【讨论】:

          【解决方案6】:

          感谢您的解决方案 - 尽管我必须进行一些小改动才能使其正常工作:

          stopImmediatePropagation 停止了任何要执行的处理程序,因此不再展开或折叠。

          使用stopPropagation(); 为我完成了这项工作:

          $('.collaps').bind('expand', function (evt) {
            evt.stopPropagation();
          });
          
          $('.collaps').bind('collapse', function (evt) {
            evt.stopPropagation();
          });
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-01-14
            • 1970-01-01
            • 1970-01-01
            • 2013-06-27
            • 2023-03-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多