是否可以使用jQuery mobile中的可折叠集小部件的样式,但是它的功能类似于普通的可折叠(例如,允许多个可折叠在可折叠集中一次打开)?
http://jquerymobile.com/demos/1.1.0/docs/content/content-collapsible-set.html
答案 0 :(得分:2)
是的,这是可能的,但你必须像这样破解你的方式:
$('.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');
答案 1 :(得分:2)
使用微小hack但没有任何类属性操作的另一个解决方案是声明一个扩展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')
答案 2 :(得分:2)
对常见答案的补充说明:
$('.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' );
答案 3 :(得分:1)
您可以使用Collapsibles代替可折叠套装或手风琴。
与“可折叠集”的区别在于可以同时打开多个可折叠行。
答案 4 :(得分:0)
这可以通过在主要事件完成后停止事件传播来完成。
$('.collaps').bind('expand', function (evt) {
evt.stopImmediatePropagation();
})
$('.collaps').bind('collapse', function (evt) {
evt.stopImmediatePropagation();
});
collaps是您为集合中所有可折叠项提供的类的名称。 然后打开和关闭一个不会影响其余部分。
答案 5 :(得分:0)
感谢您提供解决方案 - 尽管我必须做一些小改动才能让它发挥作用:
stopImmediatePropagation
停止执行任何处理程序,因此不再展开或折叠。
使用stopPropagation();
为我完成工作:
$('.collaps').bind('expand', function (evt) {
evt.stopPropagation();
});
$('.collaps').bind('collapse', function (evt) {
evt.stopPropagation();
});