• このエントリーをはてなブックマークに追加

2009-02-24 23:38 追記
不具合を修正したものを こちらのエントリ で公開しました.

はじめに

住所入力系のフォームを設置するときにいつもお世話になっております.

しかし現状では,住所が見つかった,住所が見つからなかった,入力した郵便番号がおかしい,などの結果をフックするためのしくみがないように思えます.(フックするってこういう使い方でいいのかな?)(私の使い方が悪いだけでしたらゴメンナサイ.)

そんなわけで...

CodeRepos で 開発中のソースコード を公開しています。
AjaxZip 2.0 – Ajax郵便番号→住所自動入力フォーム(CGI不要版)

CodeReposにある同ライブラリのソースコードを拝借し,検索処理後にコールバック関数を実行できるようなしくみにしてみました.

使い方

個人的によく使う次の形を想定しています.

<form>
郵便番号:<input type="text" name="zipcode" value="" />
<input type="button" value="住所検索" />
住所: <input type="text" name="address" value="" />
</form>

従来

ご存じのとおり,次のような1行を「住所検索」なボタンのクリックイベントに記述するだけでOKですね.

AjaxZip2.zip2addr( 'zipcode', 'address', 'address', null, null, null );

今回

まず,検索処理後の振る舞いを,コールバック関数として定義します.

var callback = function( res ) {
  switch( res.result ) {
  // 対応する住所が見つかった
  case AjaxZip2.RESULT.FOUND:
    alert( res.data );
    break;
  // 対応する住所が見つからなかった
  case AjaxZip2.RESULT.NOT_FOUND:
    alert( '該当なし' );
    break;
  // 郵便番号の値が空
  case AjaxZip2.RESULT.NULL:
    alert( '郵便番号が空' );
    break;
  // 郵便番号の書式に誤りがある
  case AjaxZip2.RESULT.INVALID_FORMAT:
    alert( '郵便番号に誤り' );
    break;
  // 郵便番号の値が前回検索時と同じ
  case AjaxZip2.RESULT.SAME_AS_PREV:
    alert( '前回の検索と同じ' );
    break;
  }
};

そして,定義したコールバック関数名前を,いちばん最後に引数として追加します.

AjaxZip2.zip2addr( 'zipcode', 'address', 'address', null, null, null, callback );

これでOKです.

なお,最後の引数を指定しなかったり,コールバック関数が undefined だったりした場合は,従来の動作と変わりありません.

ソースコード

オリジナルとの差分であるパッチと,それを実際にあてたものを,CodeReposにコミットしておきました.オリジナルが置いてあるディレクトリに branches/patch-20090212 というディレクトリを作成し,その中に置いてあります.

おわりに

以上,ajaxzip2 をちょこっとだけ便利(と個人的には思ってます)にすべく,ソースコードを修正してみました.

インタラクティヴになってますかね...