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

requirejsでのモジュール読み込み

JavaScriptのモジュール化では2019年5月現在ではwebpackなどを使うことが一般的かと思いますが、以前はrequire.jsなどというライブラリがあったようです。 例えば下記のようなファ …

no image

静的解析ツールについて

  ある程度の規模のプロジェクトだったら使っているであろう静的解析ツールについて。 Contents1 PHP CodeSniffer2 JavaScript eslit3 C# Style …

no image

gulpインストールとタスクの実行

今更ですが、gulpインストールと作業に関して。 less使ってたんですが、コンパイルをずっとatomのエディタで行っていたんですが、一般的にはgulpで実行する方のほうが多いでしょう。 別件でgul …

no image

npmでのJSライブラリインストール&ビルド(※Laravel使用時)

JavaScriptのインストールですが、いままではライブラリを1つ1つインストールしてました。 bowerでインストールしたこともあったんですが、読み込み自体は1つ1つしていました。 先日仕事でnp …

no image

vueについてのポイント

vueについて学習した時のポイントなどを。 Contents1 機能として確認したこと2 component3 vue-route4 vuex5 computed6 created,mounted7 …

アーカイブ