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");
 });

collapsibleexpandと、JQM に追加したカスタム イベントの両方を使用して、collapsiblebeforeexpandこれが役立つかどうかをテストします。

すべてのイベントを登録でき、false を返すと、コンソールがトリガーされなくなります。ただし...折りたたみ式はまだ展開します... :-(

イベントを追加すると、イベントのbeforeexpand呼び出し時に JQM 内の後続のコードが実行されなくなると思いpreventDefaultましたが、それでも実行されます。

質問:
展開する JavaScript が実行される前にトリガーされるイベントの実行を防止して、折りたたみ可能オブジェクトが正しく展開されないようにするにはどうすればよいですか?

PS: JQM と UI の両方が同じウィジェット ファクトリとイベント メカニズムを使用するため、jQueryUI でタグ付けしています。

4

3 に答える 3

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 に答える
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 に答える