3

我正在使用 JQM collapsibleset 小部件。

我需要一个可折叠的按钮(它允许向集合/手风琴添加更多元素),所以当它被点击时,它不应该展开(或折叠)。

我使用以下代码无济于事:

 $("div.ui-dynamic-tabs div.tab_add").on("collapsiblebeforeexpand", function (e) {

      e.stopPropagation();
      e.stopImmediatePropagation();
      e.preventDefault();
      return false;
      console.log("foo");
 });

使用我添加到 JQMcollapsibleexpandcollapsiblebeforeexpand自定义事件来测试这是否有帮助。

我可以注册所有事件并返回 false 也确实可以防止触发控制台。然而......可折叠的仍然展开...... :-(

我认为添加beforeexpand事件会阻止 JQM 中的后续代码在调用preventDefault事件时运行,但它仍然会执行。

问题:
如何通过阻止执行在扩展 javascript 运行之前触发的事件来阻止可折叠组件正确扩展?

PS:我也使用 jQueryUI 进行标记,因为 JQM 和 UI 都使用相同的小部件工厂和事件机制。

4

3 回答 3

1

在 jQuery Mobile 1.3.2 中,该事件称为collapsibleexpand,并且确实可以防止其默认行为。

你只需要写:

$("div.ui-dynamic-tabs div.tab_add").on("collapsibleexpand", function(e) {
    e.preventDefault();
});
于 2013-09-03T09:45:45.823 回答
1

是 Github 上 JQM 的解决方案:

$.widget( "mobile.collapsible", $.mobile.collapsible, {
  _handleExpandCollapse: function( isCollapse ) {
    if ( this._trigger( "collapsiblebefore" +
      ( isCollapse ? "collapse" : "expand" ) ) ) {

          this._superApply( arguments );
     }
    }
});
于 2013-09-03T12:00:14.740 回答
1

根据频繁的回答,这是适合 JQM 1.4 的修改:

$.widget('mobile.collapsible', $.mobile.collapsible, {
  _handleExpandCollapse: function(isCollapse) {
    if (this._trigger('before' + (isCollapse ? 'collapse' : 'expand'))) {
      this._superApply(arguments);
    }
  }
});

绑定事件:

$('#mycollapsible div').on('collapsiblebeforeexpand', function(event, ui) {
  if (someCondition)
    event.preventDefault(); // prevent node from expanding
});
于 2014-07-03T22:00:01.310 回答