大変お世話になっているYubinbango.jsライブラリなのですが、
標準では.p-postal-code
のkeyupイベントで住所入力が行われる挙動となっています。
大体のWebデザイナーさんは郵便番号入力欄の横に「住所を入力する」ボタンをつけてしまうので、対応する処理を作りました。
通常の挙動である郵便番号入力欄のkeyupを大雑把にキャンセルをして、「住所を入力する」ボタンを押したときにJSで代行してkeyupを発火します。
※ページ内に.h-adr
が1つしかない想定のものです。
複数あるときは https://github.com/yubinbango/yubinbango/blob/gh-pages/yubinbango.ts のhadrloop()
を参考に。
想定HTML
<form class="h-adr">
<!-- 略 -->
<input type="text" class="p-postal-code" placeholder="000-0000">
<button type="button" class="postal-search">住所を検索する</button>
<!-- 略 -->
</form>
(function() {
//該当フォーム
var hadr = document.querySelector(".h-adr"),
cancelFlag = true;
//イベントをキャンセルするリスナ
var onKeyupCanceller = function(e) {
if(cancelFlag){
e.stopImmediatePropagation();
}
return false;
};
// 郵便番号の入力欄
var postalcode = hadr.querySelectorAll(".p-postal-code"),
postalField = postalcode[postalcode.length - 1];
//通常の挙動をキャンセルできるようにイベントを追加
postalField.addEventListener("keyup", onKeyupCanceller, false);
//ボタンクリック時
var btn = hadr.querySelector(".postal-search");
btn.addEventListener("click", function(e) {
//キャンセルを解除
cancelFlag = false;
//発火
let event;
if (typeof Event === "function") {
event = new Event("keyup");
} else {
event = document.createEvent("Event");
event.initEvent("keyup", true, true);
}
postalField.dispatchEvent(event);
//キャンセルを戻す
cancelFlag = true;
});
})();