8

ドキュメント ( http://jquerymobile.com/demos/1.2.0/docs/api/events.html ) によると、jQuery モバイル ページのすべてのウィジェットとプラグインが実行された後に pageinit イベントを呼び出す必要があります。そのため、イベント コールバックで問題なく、そのページの要素を操作できるはずです。ただし、ページが初期化されるのをリッスンしてから、ページ上のボタンを操作しようとすると、次のエラーが発生します。

初期化前にボタンのメソッドを呼び出すことはできません。メソッド「無効」を呼び出そうとしました

コードペンをまとめました。

http://codepen.io/mattsnider/pen/mvcbD

何を与える?pageinit は文書化されているとおりに機能しませんか、それともバグですか?

4

2 に答える 2

25

あなたのpageinitイベントに問題はありません。間違っているのは<a>タグにあります。

発生しているエラーを取り除くには、コードに 2 つの変更を加える必要があります。

  1. そうじゃないdisabled、そのdisable
  2. メソッドを呼び出す前に、disableメソッドを呼び出す必要がありますbutton()。したがって、button要素を初期化したことになります。

コードは次のようになります。

 $('#ageNext').button().button('disable');

しかし、これを行うと、次のようなエラーが発生します。

キャッチされていない TypeError: 未定義のメソッド 'addClass' を呼び出せません

disable犯人はメソッドを呼び出すコードにあります

disable: function() {
  this.element.attr( "disabled", true );
  this.button.addClass( "ui-disabled" ).attr( "aria-disabled", true ); 
  //^^ Uncaught TypeError: Cannot call method 'addClass' of undefined    
  return this._setOption( "disabled", true );
}

あそこが見えthis.buttonますか?これはundefined、要素が実際のボタンでない場合になります。

そうは言っても、私は要素のタイプとタイプdisable のみに取り組む必要があります。何らかの理由で、これは偽装ボタンで期待どおりに機能しません。次のように、クラスを要素に手動で追加することで、これを機能させることができます。input[type=button]<button/><a/>ui-disabled

$(document).on('pageinit', '#age', function (e) {
    $('#ageNext').addClass('ui-disabled');
});

デモ: http://jsfiddle.net/hungerpain/gzAHT/

于 2013-07-26T06:37:57.833 に答える