skillup

技術ブログ

JavaScript

ajaxがらみのイベントの発動とwhenに関して

投稿日:2019年3月24日 更新日:

実務で住所のプルダウンを実装する機会がありました。

[東京都][中央区][明石町]

みたいにカテゴリーが2〜3あって連動するプルダウンのパターンです。

これを実装するときのポイントですが、新規保存よりも編集の方が難しいです。

編集時には親の値を意識したプルダウンのリストを持っている必要があります。

今回でいうと[中央区]には市区町村のプルダウンが入ります。

このプルダウンは親(今回でいうと東京都、つまりは都道府県)に依存するため、親の値を意識したリストを持っている必要があります。

実装方法としては2つあります。

  1.  親の値を意識したプルダウンリストをプログラム側で保持しておく
  2.  画面読み込み時にJavaScriptで親の値を擬似的に選ぶ(changeイベントの発火)

1がスタンダードな方法ですが、項目数が少ない場合には2の方が簡単だったりします。

書き方ですが下記のような方法でいけます。

上記のような書き方でイベントが発火しますので、画面が読み込まれた時にJSが発動して、連動プルダウンが動きます。

注意点としてはプルダウンの連動の場合、非同期であることを忘れてはいけません。要は

[東京都][中央区][明石町]

のような場合、

都道府県のchangeイベントが発生し、それを受けて次に市区町村のchangeイベントが発生し、最後に町村のchangeイベントが発現します。

この場合、親のイベントが終わったことを受けて、子供がイベントをキャッチしないといけませんが、普通に下記のように書くと非同期のために親が終わらないうちに子の処理が始まってしまいます。

この場合、親の処理を終えた後に子の処理を動かしたい場合ですが、whenを使って下記のように書くことができます。

詳しい仕様は調べ中ですが、Promiseなどと近い感じで非同期処理をかけるようです。

これだとプログラム側で親の値を意識したプルダウンを書かなくてもいいので楽ですね。

欠点としては画面の項目数が多いとものすごい遅延してしまって、実用には耐えられないことですかね・・・今回の要件では結局10箇所ぐらいに同一のプルダウンがあったため、没になり、プログラム側でリストを作る手法を選びましたが覚えておいて損はなさそうです。

*注意点

上記の処理の場合、同一のイベントが画面内に複数ある場合、when〜以下の処理は関数でひとまとまりにしてあげないとうまく連動しません。(実行順番が保証されないようです。)

このように書いてはダメで、

下記のように書かないといけません。

参考URL

jQueryで、順番に実行が出来る .when() から .done() が便利だったのでメモ

 

 

-JavaScript
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

vueでのコンポーネント間の変数のやりとりに関して

vueをコツコツと勉強していますが、コンポーネント間で変数の受け渡しをしたいときなどは色々注意が必要かと思います。 個人的には下記のような解釈で組んでおります。 Contents1 vuex2 syn …

no image

JSでの他ファイル読み込み。requireやimportについて

JavaScriptに関して、知識が非常に古い段階で止まっているのでコツコツとアップデートをしております。 今回はrequireやimportなど、他のファイルの読み込みについてです。 PHPなどサー …

no image

Angularでのfilter

今回はAnuglarでよく使うfilterという機能です。 使いどころとしては入力フォームに対応させて表示項目を絞る、みたいな使い方が一般的かと思います。 一番簡単なものとしては配列があり、入力値にあ …

no image

JSでの金額変換で気をつけることなど

以前、ちょっと特集した JSでの画面の金額集計 の続きです。 画面で帳票系のアプリを作ろうとしている時など、画面上の値から金額の合計金額を出すなどがよく見られます。 すごく基本的ですが、PHPに慣れて …

no image

npmコマンドの整理

npmのコマンドのまとめに関して。 Contents1 npmとは?2 よく使うコマンド2.1 npm init -y2.2 npm install パッケージ名(npm -i パッケージ名)2.2. …