17
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Yubinbango.jsの住所入力をボタンクリック時に変更する

Last updated at Posted at 2020-08-03

大変お世話になっているYubinbango.jsライブラリなのですが、
標準では.p-postal-codeのkeyupイベントで住所入力が行われる挙動となっています。

大体のWebデザイナーさんは郵便番号入力欄の横に「住所を入力する」ボタンをつけてしまうので、対応する処理を作りました。

通常の挙動である郵便番号入力欄のkeyupを大雑把にキャンセルをして、「住所を入力する」ボタンを押したときにJSで代行してkeyupを発火します。

※ページ内に.h-adrが1つしかない想定のものです。
複数あるときは https://github.com/yubinbango/yubinbango/blob/gh-pages/yubinbango.tshadrloop()を参考に。

想定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;
	});
})();
17
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?