1

シナリオは次のとおりです。2つのjQueryMobileポップアップがあり、そのうちの1つだけが特定の時間に表示されます(もう1つはその時点まで表示されていない可能性があります)。これらの各ポップアップには、jQuery Mobileが指定された個別のダミークラスを選択して、それらを見つけるのに役立ちます。私がする必要があるのはこれです-ポップアップが閉じる前に(そして私はpopup('close')を介してプログラムでそうします)私は最初の値(デフォルト)を表示するために選択をリセットしたいと思います。簡単だと思いました。ただ発行する

$('.selector').val(0).selectmenu('refresh')

ただし、これを行うと、初期化の前にselectmenuのメソッドを呼び出すことができないというエラーが発生します。これは、「その他」のポップアップにも同じクラスのselectがあり、その時点で初期化されていないために発生すると思います。

密接に関連している2つのポップアップに同じイベント処理コードを使用しているため、他の選択に別のダミークラスを使用することは実際にはオプションではありません。

私も試しました

$(popupid).find('.selector').val(0).selectmenu('refresh') 

しかし、結果は同様でした。確かに、特定のクラスのすべての子アイテムを取得してそれらに取り組むための信頼できる方法があります!私はそれをfindで持っていると思っていましたが、そうではないようです。もう1つのオプションは、最初のクエリが初期化された後に各アイテムが返されるかどうかを確認することですが、それも簡単ではないようです。私はこれでいくつかの助けをいただければ幸いです。

4

1 に答える 1

0

自分の質問に答える習慣がついたようです!これが解決策です

要点をまとめると

  • 2つ以上のポップアップが定義されており、それぞれが1つ以上の選択を使用してスタイルが設定されます。
  • a。大画面でのjQueryMobileselectとb。小さな画面でのMobiScrollの選択
  • 選択は、ダミーのクラス宣言を介して簡単に識別できます
  • ポップアップが閉じたら、選択が最初のオプションの表示に戻るようにします。

それをより具体的にするために、ここに例があります

<div data-role='popup' id='p_taqa1618A'>
  <select id = 'r_taqa1618A' class='sppp' data-role='none' data-mini='true'>
   <option value='1'>One</option>
   <option value='2'>Two</option>
   <option value='3'>Three</option>
   <option value='4'>Four</option>
   <option value='5'>Five</option>
  </select>
  //other controls inside this popup

<div data-role='popup' id='p_taqa1618B'>
  <select id = 'r_taqa1618A' class='sppp' data-role='none' data-mini='true'>
   <option value='1'>Eins</option>
   <option value='2'>Zwei</option>
   <option value='3'>Drei</option>
   <option value='4'>Vier</option>
   <option value='5'>Funf</option>
  </select>
  //other controls inside this popup

常に、2つのポップアップのうちの1つ、taqa1618Aまたはtaqa1618Bのみが開きます。その時点で、もう一方は以前に開閉されている場合とされていない場合があります。

その最後のステートメントの結果は、選択をリセットするという素朴な試みです

$('。sppp')。val( '1')。selectmenu('refresh')は機能しません-jQueryは、初期化されていないselectmenuを更新しようとしていると文句を言います。小さな画面で使用されるスクローラーバージョンも同様です。だからここにうまくいく解決策があります。

ポップアップを閉じる前に、プログラムで、

if (600 < $(window).width())
{
 $(popid).find('.sppp').filter('select').val('1').selectmenu('refresh');
} else
{
 $(popid).find('.sppp').filter('select').scroller('setValue','1',true);
}

に続く

$(popid).popup('close');

ここには多くの微妙な問題がありますが、最も指摘する必要があるのはおそらくこれです-スタイルを変更したコントロールは、同じクラスを持つ他の要素を作成することになります。たとえば、HTMLselectがjQueryMobile selectmenuにアップスタイルされている場合、jQMは同じクラス(この場合はsppp)を持つスパンを追加します。

そのため、filter('select')を介してfind('。sppp')の結果をフィルタリングする必要があります。

これを行う過程で私が発見した興味深い事実は、jQMのバグである可能性があります-その最後の行

$(popid).popup('close')

提供されたpopidが間違っている場合でもその仕事をします。

于 2012-12-21T06:51:14.687 に答える