팡이네

경도, 위도 2개의 좌표로 사이의 거리 계산

//------------------------------------------
// 경도, 위도 2개의 좌표로 사이의 거리 계산
//------------------------------------------
getDistince(lng1: number, lat1: number, lng2: number, lat2: number, useKm?: boolean) {
	if ((lng1 == lng2) && (lat1 == lat2)) {
		return 0;
	} else {
		const theta = lng1 - lng2;
		let dist = Math.sin(this.deg2rad(lat1)) * Math.sin(this.deg2rad(lat2))
					+ Math.cos(this.deg2rad(lat1)) * Math.cos(this.deg2rad(lat2)) * Math.cos(this.deg2rad(theta));
		dist = Math.acos(dist);
		dist = this.rad2deg(dist);
		dist = dist * 60 * 1.1515;

		if (useKm) {
			dist = dist * 1.609344;
		} else {
			dist = dist * 1609.344;
		}

		return dist;
	}
}

deg2rad(deg: number) {
	return deg * Math.PI / 180.0;
}

rad2deg(rad: number) {
	return rad * 180 / Math.PI;
}

출처

https://fruitdev.tistory.com/189

사용자 웹 브라우저 및 버전 확인

function getBrowserInfo(opt) {
	var ua = navigator.userAgent.toLowerCase();
	
	if (ua.indexOf('android') > -1) return 'Android';
	else if (ua.match(/iphone|ipad|ipot/)) return 'iOS';
	
	if (navigator.appName == 'Microsoft Internet Explorer') {
		if (opt == 'n') return 'Explorer';
		else {
			var re = new RegExp('msie ([0-9]{1,}[\\.0-9]{0,})');
			if (re.exec(ua) !== null) {
				if (opt == 'v')
					return parseInt(RegExp.$1);
				else
					return 'Explorer '+ parseInt(RegExp.$1);
			}
		}
	}
	else if (ua.indexOf('trident') != -1 && navigator.product == 'Gecko') { //IE 11 above
		if (opt == 'n') return 'Explorer';
		else {
			var re = new RegExp('trident/.*rv:([0-9]{1,}[\.0-9]{0,})');
			if (re.exec(ua) != null) {
				if (opt == 'v')
					return parseInt(RegExp.$1);
				else
					return 'Explorer '+ parseInt(RegExp.$1);
			}
		}
	}
	else if (/edge/.test(ua)) {
		if (opt == 'n') return 'Edge';
		else {
			if (opt == 'v')
				return parseInt(/edge\/([\d\.]+)/.exec(ua)[1]);
			else
				return 'Edge '+ parseInt(/edge\/([\d\.]+)/.exec(ua)[1]);
		}
	}
	else if (/chrome/.test(ua)) {
		if (opt == 'n') return 'Chrome';
		else {
			if (opt == 'v')
				return parseInt(/chrome\/([\d\.]+) safari/.exec(ua)[1]);
			else
				return 'Chrome '+ parseInt(/chrome\/([\d\.]+) safari/.exec(ua)[1]);
		}
	}
	else if (/firefox/.test(ua)) {
		if (opt == 'n') return 'FireFox';
		else {
			if (opt == 'v')
				return parseInt(/firefox\/([\d\.]+)/.exec(ua)[1]);
			else
				return 'FireFox '+ parseInt(/firefox\/([\d\.]+)/.exec(ua)[1]);
		}
	}
	else if (/safari/.test(ua)) {
		if (opt == 'n') return 'Safari';
		else {
			if (opt == 'v')
				return parseInt(/version\/([\d\.]+) safari/.exec(ua)[1]);
			else
				return 'Safari '+ parseInt(/version\/([\d\.]+) safari/.exec(ua)[1]);
		}
	}
	
	return 'Other';
}

getBrowserInfo('n');	//웹 브라우저 이름
getBrowserInfo('v');	//웹 브라우저 버전
getBrowserInfo();		//웹 브라우저 이름 + 버전

테이블 안에 있는 체크박스 모두 선택 및 해제
테이블 ID = 'xxxxx_tblList'
전체 선택 체크박스 ID = 'xxxxx_chkAll' 인 경우 뒷부분 선택자 id$ 로 선택
전체 선택 체크박스 역시 영향받기 때문에 thead, tbody 태그로 구분해서
tbody에 있는 체크박스만 처리

$(document).ready(function () {
	$('input[id$="chkAll"]').click(function () {
		var tbl = $('table[id$="tblList"]');
		var checked = $(this).is(':checked');
		$('tbody tr td input:checkbox', tbl).each(function () {
			$(this).prop('checked', checked);
		})
	});
});

//날짜인지 검사
function isDate(d, c) {
    var y, m, d;
    if (d.length == 8) {
        y = parseInt(d.substr(0, 4));
        m = parseInt(d.substr(4, 2));
        d = parseInt(d.substr(6, 2));
    }
    else if (d.length == 10) {
        if (c == null) c = '-';
        var a = d.split(c);
        if (a.length != 3) return false;

        y = parseInt(a[0]);
        m = parseInt(a[1]);
        d = parseInt(a[2]);
    }
    else {
        return false;
    }

    var date = new Date(y, m - 1, d);

    return (date.getFullYear() == y && date.getMonth() + 1 == m && date.getDate() == d);
}

//숫자 키입력 검사
function isNumberKeyDown(e) {
    e = e || window.event;
    var keyCode = (e.keyCode ? e.keyCode : e.which);

    if (keyCode == 8 || keyCode == 9 || keyCode == 27 || keyCode == 46) return true;	//BackSpace, Tab, ESC, Delete
    if (keyCode == 35 || keyCode == 36 || keyCode == 37 || keyCode == 39) return true;	//Home, End, Left, Right Arrow
    if (e.ctrlKey || e.shiftKey || keyCode == 13) return false; //Enter

    return ((keyCode > 47 && keyCode < 58) || (keyCode > 95 && keyCode < 106));
}



위와 같이 처리해도 한글은 입력되기 때문에 한글 입력을 방지하기 위해 ime-mode 스타일 추가