Zendフレームワークサイトからフォームを取得し、jquery mobileによって記述された関数の新しいファイルに応答として配置しましたが、次のエラーが発生します。
キャッチされない例外:初期化の前にselectmenuのメソッドを呼び出すことはできません。メソッド 'refresh'を呼び出そうとしました。
このファイルの機能コード:
function addItem(id) {
$.ajax({
url:'http://zf.darina.php.nixsolutions.com/order/index/create-order-mobile',
dataType:"jsonp",
data:{id_good:id},
success:function (resp) {
console.log(resp);
$('.product-table').empty();
$('.product-table').append(resp.prod);
$('.product-table').append(resp.form);
$('.add-order-btn').button();
$('.mob-size').selectmenu('refresh', true);
$('#block').page();
}
})
}
最初にselectmenuを強制的に初期化します。
$('.mob-size').selectmenu(); // Initializes
$('.mob-size').selectmenu('refresh', true);
またはこれを略して使用します
$('.mob-size').selectmenu().selectmenu('refresh', true);
私の場合、「disable」メソッドを呼び出す前に選択を初期化していないとエラーが発生しましたが、初期化していた場合、選択は無効にならずに複製されました-代わりにタグ名でオブジェクトを選択しようとしましたCLASSまたはIDNAMEによる
$('select').selectmenu('disable');
の代わりに
$('.select-class-name').selectmenu('disable');
強制的な初期化なしで機能しました
これは、カスタム更新委任関数で行います。
var w = $("#yourinput");
if( w.data("mobile-selectmenu") === undefined) {
// not initialized yet, lets do so
w.selectmenu();
}
w.selectmenu("refresh",true);
によると ここでの拡張解決
これは、元のセクションを複数回複製するために複製既存の選択要素の場合に発生しました。
元の要素に対して 'refresh'を呼び出すと、正常に機能しましたが、複製されたセクションに対して呼び出すと、質問に表示されるエラーにつながりますでした。
ただし、次の画像に示すように、selectmenu()を呼び出すと、フォームに「破壊」が発生していました。
説明:トップ=オリジナル。 bottom = selectmenuを呼び出した直後に破壊されたクローン要素。
解決策:
次のコードは、この破壊の問題を解決しました。
cloned_elem.find( 'select [name = MyClass]')。selectmenu()。selectmenu( "destroy")。selectmenu();
Selectmenu( "destroy")を呼び出すには最初のselectmenu()を呼び出す必要があるため、これは理想的なソリューションではありません。よりクリーンなソリューションを聞いてうれしいです。
私は同じ問題を見つけましたが、より複雑な解決策を見つけました。 jqmがselect
要素をラップするとき、それをselect
要素と同じクラスリストを持つ<span>
要素に配置します。私はそれへの参照を変更して、読む代わりに:
row.find(".selectCompletion").selectmenu("disable");
今それは読む:
row.find("select.selectCompletion").selectmenu("disable");
Jqueryが、クラス名に一致する.row内のすべての要素ではなく、クラス名に一致するselect
要素のみを検出するように指定すると、問題が解決しました。