1

質問

ユーザーがロード時ではなくアクションを実行したときに、このシーケンスを起動するにはどうすればよいですか?

バックグラウンド

<select>国、地域、都市の3つのメニューが連鎖しています。地域で表示されるオプションは国で選択された値に依存し、都市で表示されるオプションは地域で選択された値に依存します。たとえば、国から「米国」を選択した場合、地域のオプションは50州になります。国は常に静的な唯一のメニューです。地域と都市のメニューオプションは、ユーザーが前のメニューから選択した内容に応じて動的に入力されます。国または地域の値を選択すると、チェーンされたサブメニューのオプションがサーバーから取得されます。このプロセスはで実行され$(selectID).change()ます。これを実現するために、 ChainedSelectsjQueryプラグインを使用しています。具体的には、「リモート」を使用しています)。

<select>メニューの構造:

<select id="country">
  <option value="0">Select country...</option>
  <option value="1">Country 1</option>
  <option value="2">Country 2</option>
  ...
</select>

<select id="region">
  <option value="0">Select region...</option>
  <option value="1">region 1</option>
  <option value="2">region 2</option>
  ...
</select>

<select id="city">
  <option value="0">Select city...</option>
  <option value="1">city 1</option>
  <option value="2">city 2</option>
  ...
</select>

チェーンAPIを使用して、<select>メニューは次のようにチェーンさ$(document).ready()れます。

$('#region').remoteChained('#country', 'server.php');
$('#city').remoteChained('#region', 'server.php');

問題

これらの<select>メニューは検索インターフェースの一部です。このインターフェースは、ユーザーの最新の検索を記憶しています。たとえば、ユーザーの最新の検索が「米国>ルイジアナ>ニューオーリンズ」だった場合<select>、ページ上のアイテムは最初に次のようにレンダリングされます(この時点では、チェーンAPIはまだ機能していません)。

<select id="country">
  ...
  <option value="113" selected>United States</option>
  ...
</select>

<select id="region">
  ...
  <option value="1390" selected>Louisiana</option>
  ...
</select>

<select id="city">
  ...
  <option value="17267" selected>New Orleans</option>
  ...
</select>

しかし、$(selectID).remoteChained(...)関数が呼び出されると$(document).ready()、地域と都市の選択オプションがサーバーからフェッチされた値で上書きされ、「選択された」オプションが失われます(<option>地域と都市の初期アイテムのリスト全体が失われます)。 、 実際には)。上記の保存された検索の例を使用すると、3つの選択オプションのそれぞれのオプションは、最初に1)米国2)ルイジアナ3)ニューオーリンズに事前に選択されている必要がありますが、代わりに1)米国2)地域を選択... 3)都市を選択...つまり、<select>メニューは、ページの読み込み時にではなく、ユーザーが値の1つを物理的に変更した場合にのみ動的に作成する必要があります。

ページの読み込み時に新しい選択オプションを取得しないようにする方法、および選択オプションがユーザーによって物理的に変更された場合にのみ取得する方法についてのアドバイスはありますか?remoteChained()で関数を呼び出そうとしまし$(selectID).change()たが、スタックをオーバーロードする再帰の問題が発生したため、機能しません。

あなたが持っているかもしれないどんな考えにも前もって感謝します。

4

1 に答える 1

1

問題を見つけました。以下のソースコードからのこの行は、<select>ロード時に要素を強制的に更新していました。削除しました。これで、ユーザーが変更を加えたときにのみ更新されます。

/* Force updating the children. */
$(this).trigger("change");
于 2012-07-03T01:15:28.160 に答える