スマートフォンでよくあるハンバーガーメニューで、「メニューを開いているときはメニュー以外の部分をクリックしたときにメニューを閉じたい」という要望がたまにあるので、実装方法をメモしておきます。
サンプルコード
今回は簡単に実装するためにアコーディオンで試してみていますが、ハンバーガーメニューの場合でも処理はそれほど変わらないと思います。
HTML
<dl class="accordion"> <dt>開閉ボタン</dt> <dd> <p>テストテストテスト</p> <p><a href="https://www.google.co.jp/">リンクテスト</a></p> <p>テストテストテスト</p> </dd> </dl>
JavaScript
$(function() {
	var $accSwitch = $('.accordion dt');
	var $accContents = $('.accordion dd');
	// 開閉ボタンクリック時
	$accSwitch.on('click', function(e) {
		$accContents.slideToggle();
		e.stopPropagation();
	});
	// アコーディオン内クリック時
	$accContents.on('click', function(e) {
		e.stopPropagation();
	});
	// 画面クリック時
	$(document).on('click', function() {
		// アコーディオンが開いているとき
		if($accContents.is(':visible')) {
			$accContents.slideUp();
		}
	});
});
アコーディオン部分以外をクリックしたときにアコーディオンを閉じるデモページ
アコーディオン自体はslideToggle()で開閉するだけのシンプルなものです。
画面をクリックしたときに閉じる処理は$(document).on(‘click’, function()); で実装していますが、これだけだとアコーディオン部分をクリックした時にも反応してしまうので、アコーディオン部分ではe.stopPropagation();で処理が発生しないようにしています。
 
コメントが承認されるまで時間がかかります。