[JavaScript] QR CODE 스캐너 제작 - jsQR 사용[JavaScript] QR CODE 스캐너 제작 - jsQR 사용

Posted at 2019.06.13 14:28 | Posted in JavaScript & jQuery/JavaScript




GitHub : https://github.com/cozmo/jsQR





■ 자바스크립트로 QR코드 스캔하고 데이터 읽기





인터넷에 많이 돌아다니는 자료들로 손쉽게 QR코드를 제작할 수 있지만.


보통 이렇게 생산한 QR코드를 읽어어오는 리더기를 제작하는것과 관련된 것은


잘 정리된 포스트를 발견하기 힘들었다.



그렇게 여러가지 방법을 찾다가.


jsQR이란 모듈을을 발견하였고,


이번에 jsQR을 이용하여


제작한 QR코드를 스캔하려하는 예제를 정리해 본다.








#01. jsQR 다운받기



먼저 https://github.com/cozmo/jsQR 페이지에 접속하여 jsQR-master.zip 파일을 을 다운받도록 하자.






다운받은 jsQR-master.zip 파일의 압축을 해제하면


안에 docs 라는 디렉토리가 존재할 것이다.






docs 디렉토리 내에는


index.html 파일과 jsQR.js 파일이 존재하는데


실질적으로 여기서 사용하게 될 파일은 이 jsQR.js 하나이다.








#02. 소스 코드 작성



그냥 index.html을 바로 사용해도 되지만.


아래 코드는 필자가 현재 사용하려고 하는 프로젝트의 성격에 맞게 index.html변경한 코드이다.



<html>

<head>

<meta charset="utf-8">

<title>:: jsQR 테스트 ::</title>

// 다운받은 jsQR.js 를 사용한다.

<script type="text/javascript" src="./jsQR.js"></script>

<style type="text/css">

main {

width:100%;

height:100%;

text-align:center;

}

main > div {

float:left;

width:1%;

height:98%;

}

main > div:first-child {

width:49%;

}

main > div:last-child {

background-color:#D3D3D3;

width:49%;

}


div#output {

background-color:#BDBEBD;

padding-left:10px;

padding-right:10px;

padding-top:10px;

padding-bottom:10px;

}

div#frame {

border:2px solid #005666;

background-color:#FFFFFF;

margin-left:10px;

margin-right:10px;

padding-left:8px;

padding-right:8px;

padding-top:8px;

padding-bottom:8px;

}

div#outputLayer {

text-align:left;

}

canvas {

width:100%;

}

</style>

</head>

<body>

<main>

<div id="test">

<h1>QR 코드 리더</h1>

<div id="output">

<div id="outputMessage">

QR코드를 카메라에 노출시켜 주세요

</div>

    <div id="outputLayer" hidden>

    <span id="outputData"></span>

    </div>

</div>

</div>

<div>&nbsp;</div>

<div>

<h1>스캔</h1>

<div id="frame">

<div id="loadingMessage">

🎥 비디오 스트림에 액세스 할 수 없습니다<br/>웹캠이 활성화되어 있는지 확인하십시오

</div>

<canvas id="canvas"></canvas>

</div>

</div>

</main>

</body>

</html>

<script type="text/javascript">

document.addEventListener("DOMContentLoaded", function() {

var video = document.createElement("video");

var canvasElementdocument.getElementById("canvas");

var canvas = canvasElement.getContext("2d");

var loadingMessagedocument.getElementById("loadingMessage");

var outputContainerdocument.getElementById("output");

var outputMessagedocument.getElementById("outputMessage");

var outputDatadocument.getElementById("outputData");

function drawLine(begin, end, color) {

canvas.beginPath();

canvas.moveTo(begin.x, begin.y);

canvas.lineTo(end.x, end.y);

canvas.lineWidth = 4;

canvas.strokeStyle = color;

canvas.stroke();

                }

    

        // 카메라 사용시

navigator.mediaDevices.getUserMedia({ video: { facingMode: "environment" } }).then(function(stream) {

              video.srcObject = stream;

              video.setAttribute("playsinline", true);      // iOS 사용시 전체 화면을 사용하지 않음을 전달

          video.play();

              requestAnimationFrame(tick);

});


function tick() {

loadingMessage.innerText = "⌛ 스캔 기능을 활성화 중입니다."

if(video.readyState === video.HAVE_ENOUGH_DATA) {

              loadingMessage.hidden = true;

              canvasElement.hidden = false;

              outputContainer.hidden = false;

       

              // 읽어들이는 비디오 화면의 크기

              canvasElement.heightvideo.videoHeight;

                canvasElement.widthvideo.videoWidth;

       

              canvas.drawImage(video, 0, 0, canvasElement.widthcanvasElement.height);

              var imageDatacanvas.getImageData(0, 0, canvasElement.widthcanvasElement.height);


              var code = jsQR(imageData.dataimageData.widthimageData.height, {


                                    inversionAttempts : "dontInvert",

              });

       

                              // QR코드 인식에 성공한 경우

                              if(code) {

            

                                     // 인식한 QR코드의 영역을 감싸는 사용자에게 보여지는 테두리 생성

                                    drawLine(code.location.topLeftCorner, code.location.topRightCorner, "#FF0000");

                                    drawLine(code.location.topRightCorner, code.location.bottomRightCorner, "#FF0000");

                                    drawLine(code.location.bottomRightCorner, code.location.bottomLeftCorner, "#FF0000");

                                    drawLine(code.location.bottomLeftCorner, code.location.topLeftCorner, "#FF0000");


                                    outputMessage.hidden = true;

                                    outputData.parentElement.hidden = false;

         

                                    // QR코드 메시지 출력

                                    outputData.innerHTMLcode.data;

         

                                    // return을 써서 함수를 빠져나가면 QR코드 프로그램이 종료된다.

                                    // return;

                              }

       

                              // QR코드 인식에 실패한 경우 

                              else {


                                    outputMessage.hidden = false;

                                    outputData.parentElement.hidden = true;

                              }

                      }

     

            requestAnimationFrame(tick);

}

});

</script>










#03. QR코드 인식 테스트




먼저 작성한 코드를 브라우저를 통해 실행시켜보자.


해당 기능을 사용할려면 반드시 카메라를 사용할 수 있는 디바이스에서 테스트 해야 한다.






그럼 위와같이 화면이 나타날텐데


먼 브라우저카메라 사용을 허용해 주면


사용이 가능해 질 것이다.






필자가 사용하는 FireFox 브라우저에서는


상단에 카메라를 사용중이라는 버튼이 나타나고,


캔버스(canvas) 영역에 카메라에 비치는 화면이 출력된다.


그럼 인식시킬 QR코드를 화면에 비춰보자.






미리 준비하 QR코드를 화면에 비추어 보았다.


위와 같이 QR코드에 저장된 내용을 읽어들이는 것을 확인 할 수 있다.









  1. 스마일맨
    포스트 글 잘 봤습니다
    한가지 궁금한건 해당 포스트는 pc버전인지요?
    모바일 웹 버전에서도 가능한건지 문의 드립니다
  2. 스마일
    소중한 답변 감사합니다
    블로그 보고 따라 해봤는데 핸드폰 카메라는 안 켜져서 여쭈어 봤습니다 ^^
  3. 갓제로
    저는 navigator.mediaDevices.getUserMedia가 없다고 뜨네요ㅜㅜ
  4. 이용삼
    아이폰에서도 컴퓨터 크롬에서도 삼성핸드폰에서도 비디오 스트림에 엑세스 할수 없다고 하는데요?
  5. 이용삼
    혹시 이것도 https에서만 되는거 아닌가요?

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[JavaScript] 셀렉트 박스의 시간 자동 비교 및 선택기능[JavaScript] 셀렉트 박스의 시간 자동 비교 및 선택기능

Posted at 2019.05.23 19:44 | Posted in JavaScript & jQuery/JavaScript




해당 포스팅은 제작중인 사이트 에 추가하기 위해 제작한 샘플 들이다.


페이지 접속시 시간값을 선택하는 셀렉트 박스의 경우,


바로 다음 시간대를 선택해 주는 기능과, 지나간 시간의 선택을 방지하는 기능이다.


두개의 기능을 따로따로 분리한 다음에 마지막 내용에서 합친것이니


그냥 완성된 하나가 필요한 사람의 경우 맨아래 코드를 참고하면 된다.








■ 페이지 시작시 셀렉트 박스 시간 자동선택




홈페이지에서 당일 예약을 받는 경우,


예약 가능한 다음 타임을 자동으로 선택되게끔 해야한 경우가 있어 샘플로 만들어본 코드이다.


페이지 접속과 동시에 시간을 선택하는 옵션을 가진 셀렉트 박스의 리스트 중에서


선택 가능한 다음 시간을 자동으로 선택하는 기능을 수행한다.



<html>

<head>

<title>:: JavaScript 시간 자동 선택 ::</title>

<script type="text/javascript">

document.addEventListener("DOMContentLoaded", function() {

const toDay = new Date();

const toYear = toDay.getFullYear().toString();

// getMonth()의 경우 0 ~ 11의 값을 출력하기에 기본적으로 항상 +1을 해서 한달을 더하지만

// 해당 예제에서는 그대로의 값을 필요로 하기에 +1을 하지 않는다.

// const toMonth = (toDay.getMonth() + 1).toString();

              const toMonth = toDay.getMonth().toString();

     

              const toDate = toDay.getDate().toString();

     

               /* 

                * 현재 시간(Hour)과 분(Minute)은 사용하지 않는다.

                * const toHour = toDay.getHours().toString();

                * const toMinute = toDay.getMinutes().toString();

                */

     

const toSecond = toDay.getSeconds().toString();

     

              lastTimeConstraint(toYear, toMonth, toDate, toSecond, function(lastDay) {


if(lastDay.getTime() > toDay.getTime()) { 

// 선택 가능한 선택 옵션(시간)의 갯수를 구한다.

              const timeCnt = document.getElementById("choiceTime").options.length;

              // const timeCnt = document.getElementById("choiceTime").childElementCount;

     

              const optTime = document.getElementById("choiceTime").children;

     

for(var num = 1; num <= timeCnt; num++) {

// 현재 옵션의값 value값을 추출한다.

var choTime = optTime[num].value;

var choHour = choTime.substring(0, 2);

var choMinute = choTime.substring(2, 4);

// 현재 년, 월, 일, 초의 값과 옵션의 시간, 분의 값을 날짜값으로 변경한다.

var optDay = new Date(toYear, toMonth, toDate, choHour, choMinute, toSecond);

if(optDay.getTime() > toDay.getTime()) {

document.getElementById("choiceTime").options[num].selected = true;

break;

}

}

}

else {

alert("금일 예약가능한 시간이 모두 지났습니다.\n내일 다시 예약하여 주시기 바랍니다.");

document.getElementById("choiceTime").options[0].selected = true;

return;

}

});

});

// 마지막 예약 가능 시간을 체크

function lastTimeConstraint(toYear, toMonth, toDate, toSecond, callBack) {

const lastTime = document.getElementById("choiceTime").lastElementChild.value;

const lastHour = lastTime.substring(0, 2);

const lastMinute = lastTime.substring(2, 4);

const lastDay = new Date(toYear, toMonth, toDate, lastHour, lastMinute, toSecond);

callBack(lastDay);

}

</script>

</head>

<body>

<h1>■ Part#1 시간 자동 선택</h1>

<option value="">- 선택 -</option>

<option value="0900">09:00</option>

<option value="1000">10:00</option>

<option value="1100">11:00</option>

<option value="1200">12:00</option>

<option value="1300">13:00</option>

<option value="1400">14:00</option>

<option value="1500">15:00</option>

<option value="1600">16:00</option>

<option value="1700">17:00</option>

<option value="1800">18:00</option>

</select>

</body>

</html>









■ 셀렉트 박스 선택시 선택 가능 시간 확인



<html>

<head>

<title>:: RegExp.exec() 선택 ::</title>

<script type="text/javascript">

function timeConstraint(optTime) {

const toDay = new Date();

const toYear = toDay.getFullYear().toString();

// getMonth()의 경우 0 ~ 11의 값을 출력하기에 기본적으로 항상 +1을 해서 한달을 더하지만

// 해당 예제에서는 그대로의 값을 필요로 하기에 +1을 하지 않는다.

// const toMonth = (toDay.getMonth() + 1).toString();

      const toMonth = toDay.getMonth().toString();

     

      const toDate = toDay.getDate().toString();

     

      /* 

      * 현재 시간(Hour)과 분(Minute)은 사용하지 않는다.

      * const toHour = toDay.getHours().toString();

      * const toMinute = toDay.getMinutes().toString();

      */

     

const toSecond = toDay.getSeconds().toString();

lastTimeConstraint(toYear, toMonth, toDate, toSecond, function(lastDay) {


if(lastDay.getTime() > toDay.getTime()) { 

const choHour = optTime.substring(0, 2);

const choMinute = optTime.substring(2, 4);

const optDay = new Date(toYear, toMonth, toDate, choHour, choMinute, toSecond);

if(optDay.getTime() < toDay.getTime()) {

alert("선택하신 시간은 경과하여\n예약을 진행 할 수 없습니다.");

document.getElementById("choiceTime").options[0].selected = true;

return;

} else {

alert("선택하신 시간으로\n예약이 진행됩니다.");

return;

}

}

else {

alert("금일 예약가능한 시간이 모두 지났습니다.\n내일 다시 예약하여 주시기 바랍니다.");

document.getElementById("choiceTime").options[0].selected = true;

return;

}

});

}


// 마지막 예약 가능 시간을 체크

function lastTimeConstraint(toYear, toMonth, toDate, toSecond, callBack) {

const lastTime = document.getElementById("choiceTime").lastElementChild.value;

const lastHour = lastTime.substring(0, 2);

const lastMinute = lastTime.substring(2, 4);

const lastDay = new Date(toYear, toMonth, toDate, lastHour, lastMinute, toSecond);

callBack(lastDay);

}

</script>

</head>

<body>

<h1>■ Part#2 시간 자동 선택</h1>

<select id="choiceTime" onChange="timeConstraint(this.value);">

<option value="" selected>- 선택 -</option>

<option value="0900">09:00</option>

<option value="1000">10:00</option>

<option value="1100">11:00</option>

<option value="1200">12:00</option>

<option value="1300">13:00</option>

<option value="1400">14:00</option>

<option value="1500">15:00</option>

<option value="1600">16:00</option>

<option value="1700">17:00</option>

<option value="1800">18:00</option>

</select>

</body>

</html>  










■ 시간 자동 선택 및 직접 선택시 선택가능 유무 확인





지금까지 페이지 접속시 자동 실행과


직접 선택시 해당 시간의 선택 가능 유무를 확인하는 코드를 구현해 보았다.


하지만 아마도 이렇게 선택해야 하는 경우.


위 두 코드를 따로 쓰는 경우는 별로 없을 것이다.


그래서 이제 위 두 코드를 합친 코드이고.


사실 이 포스팅을 작성하게 된 계기도 아래와 같은 기능을 구현하기 위함이었다.



# 소스 코드

<html>

<head>

<title>:: JavaScript 시간 자동 선택 ::</title>

<script type="text/javascript">

document.addEventListener("DOMContentLoaded", function() {

// 자동 시간 선택 함수 실행

autoSelectTime();

});

// 자동 시간 선택 함수

function autoSelectTime() {

// 선택 가능한 선택 옵션(시간)의 갯수를 구한다.

const timeCnt = document.getElementById("choiceTime").options.length;

// const timeCnt = document.getElementById("choiceTime").childElementCount;

     

const optTime = document.getElementById("choiceTime").children;

for(var num = 1; num <= timeCntnum++) {

var presence = timeConstraint(optTime[num].value, "auto");


if(presence == "success") {

document.getElementById("choiceTime").options[num].selected = true;

break;

} else if(presence == "unknown") {

break;

}

}

}

// 자동 시간 선택 함수

// optTime : 선택된 option의 value값

// motion :  자동 실행의 호출(auto)인지, 직접 선택한 경우의 호출(passive)인지의 구분

function timeConstraint(optTime, motion) {

const toDay = new Date(); // 현재 날짜

const toYeartoDay.getFullYear().toString(); // 현재 년도

// getMonth()의 경우 0 ~ 11의 값을 출력하기에 기본적으로 항상 +1을 해서 한달을 더하지만

// 해당 예제에서는 그대로의 값을 필요로 하기에 +1을 하지 않는다.

// const toMonth = (toDay.getMonth() + 1).toString();

              const toMonthtoDay.getMonth().toString(); // 현재 월(자바스크립트의 특성상 지난 달)

     

              const toDatetoDay.getDate().toString(); // 현재 일

     

              /* 

               * 현재 시간(Hour)과 분(Minute)은 사용하지 않는다.

               * const toHour = toDay.getHours().toString();

               * const toMinute = toDay.getMinutes().toString();

               */

     

const toSecondtoDay.getSeconds().toString(); // 현재 초

const choHouroptTime.substring(0, 2); // 옵션의 시간

const choMinuteoptTime.substring(2, 4); // 옵션의 분

// 셀렉트 박스의 옵션 값을 시간값으로 포맷한다.

const optDay = new Date(toYeartoMonthtoDatechoHourchoMinutetoSecond);


// 리턴할 값을 담을 변수 지정

let presence = "";


// 계속되는 반복 작업을 막기위해, 먼저 금일 마지막 시간이 이미 지났는지 여부를 확인한다.

lastOptionTime(toYeartoMonthtoDatetoSecond, function(lastDay) {

// 마지막 예약 시간이 지나지 않은경우

if(lastDay.getTime() > toDay.getTime()) { 

const choHouroptTime.substring(0, 2);

const choMinuteoptTime.substring(2, 4);

// 선택한 옵션의 시간값을 날자 값으로 포맷한다.

const optDay = new Date(toYeartoMonthtoDatechoHourchoMinutetoSecond);

// 현재시간이 옵션의 시간보다 큰경우

if(optDay.getTime() < toDay.getTime()) {

if(motion == "passive") {

alert("선택하신 시간은 경과하여\n예약을 진행 할 수 없습니다.");

// 사용자가 직접 시간을 선택하였으나 이미 시간이 경과한경우 예약 가능한 시간을 찾기위해

// autoSelectTime() 함수를 실행한다.

autoSelectTime();

}

presence = "failure";

}

// 사용가능 한 시간

else {


if(motion == "passive") {

alert("선택하신 시간으로\n예약이 진행됩니다.");

}

presence = "success";

}

}

// 마지막 시간이 지난 경우

else {

document.getElementById("choiceTime").options[0].selected = true;

alert("금일 예약가능한 시간이 모두 지났습니다.\n내일 날자로 예약하여 주시기 바랍니다.");

presence = "unknown";

}

});

return presence;

}


// 마지막 예약 가능 시간을 체크하는 함수

function lastOptionTime(toYeartoMonthtoDatetoSecond, callBack) {

// 마지막 option 엘리먼트의 value값을 가져온다.

const lastTime = document.getElementById("choiceTime").lastElementChild.value;

const lastHourlastTime.substring(0, 2);

const lastMinutelastTime.substring(2, 4);

// 마지막 option의 value값(시간)을 날자값으로 포맷한다.

const lastDay = new Date(toYeartoMonthtoDatelastHourlastMinutetoSecond);

callBack(lastDay);

}

</script>

</head>

<body>

<h1>■ 시간 자동 선택 Part3</h1>

<select id="choiceTime" onChange="timeConstraint(this.value, 'passive');">

<option value="" selected>- 선택 -</option>

<option value="0900">09:00</option>

<option value="1000">10:00</option>

<option value="1100">11:00</option>

<option value="1200">12:00</option>

<option value="1300">13:00</option>

<option value="1400">14:00</option>

<option value="1500">15:00</option>

<option value="1600">16:00</option>

<option value="1700">17:00</option>

<option value="1800">18:00</option>

</select>

</body>

</html>  





# 출력 결과







Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[JavaScript] 정규 표현식을 사용한 데이터 변환[JavaScript] 정규 표현식을 사용한 데이터 변환

Posted at 2019.04.16 15:36 | Posted in JavaScript & jQuery/JavaScript






■ 정규 표현식이란?




정규 표현식(regular expression)이란, 문자열의 패턴을 표현하는 표기 방법으로 문자열의 검색과 치환에 유용하다.


문자열의 패턴을 메타 문자(미리 약속된 특별기호)를 조합하여 표현함으로써 문자를 검색하거나 치환할 수 있다.


대부분의 프로그래밍 언어에서 정규 표현식을 지원하며, 자바스크립트에도 표준 기능으로 탑재되어 있다.




정규 표현식은 씹으면 씹을수로 맛이나는 오징어처럼 쓰면 쓸수록 그 유용함을 깨닫게 된다.


또한, 문자열을 효과적으로 다루기 위해 반드시 터득해야 되는 기술 중 하나이다. 


그러면 정규 표현식의 기본 문법과 자바스크립트에서의 사용법을 알아보자.











■ 자바스크립트에서의 정규 표현식 사용법





자바스크립트에서는 소스 코드 중에 '/패턴/'으로 정규표현식 객체를 생성할 수 있다. 이를 정규 표현식 리터럴이라고 한다.


 var re = /value=\d+/



혹은 RegExp 객체를 생성하여 사용할 수도 있다.



 var re = new RegExp("value=\d+"); 



정규 표현식 리터럴을 사용하면 스크립트가 로드되는 시점에서 정규 표현식이 컴파일되므로 성능에 유리하다.


한편 RegExp 객체를 사용하면 문자열 변수로 정규 표현식 패턴을 지정할 수 있어 동적으로 정규 표현식을 다룰 수 있게 된다.








#01. 정규 표현식 메소드



자바스크립트에는 정규 표현식과 관련하여 다음과 같은 메소드가 준비되어 있다.



 ▼ JavaScript의 정규 표현식 메서드 일람

메서

설  명

 .exec( )

 · 문자열 중에서 일치하는 부분을 검색하여 결과를 배열로 반환한다.

 · 검색에 실패한 경우 null을 반환한다.

 .test( )

 · 문자열 중에서 일치하는 부분이 있는지를 테스트한다.

 · true / false 중 하나를 반환한다.

 · RegExp의 메서드

 .match( )

 · 문자열 중에서 일치하는 것을 검색하여 결과를 배열로 반환한다.

 · 일치하는 패턴이 없는경우 null을 반환한다.

 · String의 메서드

 .search( )

 · 문자열 중에서 일치하는 것이 있는지를 테스트한다.

 · 일치하는 패턴이 없는경우 -1을 반환한다.

 · String의 메서드

 .replace( )

 · 문자열 중에서 일치하는 것을 찾아서 다른 문자열로 치환한다.

 .split( )

 · 문자열을 정규 표현식으로 분할하여 부분 문자열의 배열을 반환한다.



기능이 비슷해 보이는 메서드들이 있는데 다음과 같이 용도에 따라 나눠 생각하면 된다.


어떤 문자열 안에 정규 표현식 패턴이 있는지 확인만 하고 싶을 때는 test( ) 또는 search( )를 사용한다.


더 자세한 정보를 알고 싶을 때에는 exec( ) 혹은 match( )를 사용한다.






#02. RegExp.exec( ) 메서드




RegExp.exec( ) 메서드는 정규 표현식에 해당하는 문자열을 검색하여 패턴이 존재하면


문자열의 배열을 반환함과 동시에 RegExp 객체의 속성을 업데이트하고, 일치하는 패턴이 없으면 null을 반환한다.




결과로 반환되는 배열에는 정규 표현식에 일치하는 문자열이 첫 번째 요소에 담겨 있고,


이어서 정규 표현식 중 괄호로 묶인 부분에 해당하는 부분 문자열이 차례로 담겨 있다.


또한, 이 배열에는 속성으로 정규식에 해당하는 문자열의 인덱스 정보와 입력받은 문자열 값을 포함하고 있다.


<html>

<head>

<title>:: RegExp.exec() 메서드 ::</title>

<script type="text/javascript">

document.addEventListener("DOMContentLoaded", function() {

// 정규 표현으로 수치 + 영소문자 패턴

var re = /([0-9]+)([a-z]+)/g; // 정규 표현식 객체를 리터럴로 만들어서 변수 str에 대입

// [ ]괄호가 2번 사용되었는데 각각 부분 패턴을 의미한다.

// 대상 문자열

var str = "111jpy,8usd,xxx"; // 정규 표현식으로 확인하고 싶은 문자열을 변수 str에 대입

// 1회 실행

console.log(re.exec(str));

// 2회 실행

console.log(re.exec(str));

// 3회 실행

console.log(re.exec(str));

});

</script>

</head>

</html> 



수행결과는 아래와 같다.







정규 표현식에 g플래그를 지정하면 문자열 안에 일치하는 모든 패턴을 포함하게 된다.


예제에서는 exec( )를 여러 번 호출하며 일치하는 패턴을 차례로 출력하고 있다.


그런데 exec( ) 메서드는 test( )나 search( )에 비해 실행 속도가 느리므로 패턴의 존재 여부만을 확인하고 싶은 경우에는


사용을 권장하지 않는다.






#03. RegExp.test( ) 메서드



RegExp.test( ) 메서드는 인자로 주어진 문자열에 정규 표현식에 해당하는 문자열 패턴이 있는지 여부를 조사한다.


결과로 true나 false의 boolean 값을 반환한다.


<html>

<head>

<title>:: RegExp.exec() 메서드 ::</title>

<script type="text/javascript">

document.addEventListener("DOMContentLoaded", function() {

// 우편번호 nnn-nnn 패턴

var re = /^\d{3}-\d{3}$/;

// 정규표현식으로 패턴이 일치하는지 확인

console.log("123-123 : ", re.test("123-123"));

console.log("12-123 : ", re.test("12-123"));         // 숫자의 자릿수가 부족해 false

console.log("440-001 : ", re.test("440-001"));

console.log("aaa-bbb : ", re.test("aaa-bbb")); // 숫자가 아닌 알파벳으로 구성되어 있기때문에 false

});

</script>

</head>

</html> 



수행결과는 아래와 같다.









#04. String.match( ) 메서드



String 객체에 관련된 match( ) 메서드는 인자로 전달받은 정규 표현식 패턴을 조사한다.


정규표현식에 g 플래그를 포함하지 않은 경우는 RegExp.exec( ) 메서드와 같은 결과를 반환하지만.


g 플래그를 포함한 경우에는 일치하는 부분을 모두 포함한 배열을 반환한다.


일치하는 패턴이 없으면 null을 반환한다.


g 플래그 여부에 따른 결과의 차이를 유념해서 보도록 한다.



<html>

<head>

<title>:: String.match() 메서드 ::</title>

<script type="text/javascript">

document.addEventListener("DOMContentLoaded", function() {

// 대상 문자열

var str = "v=20, n=40, c=30";

// 숫자 패턴 검색

console.log("숫자 패턴 검색 : ", str.match(/[0-9]+/));

// 모든 숫자 패턴을 검색

console.log("모든 숫자 패턴 검색 : ", str.match(/[0-9]+/g));

// 변수 = 숫자의 조합을 검색

console.log("변수 = 숫자의 조합을 검색 : ", str.match(/\w+=\d+/g));

});

</script>

</head>

</html> 




수행결과는 아래와 같다.










#05. String.search( ) 메서드



대상 문자열에 정규 표현식에 해당하는 패턴이 있는지 확인할때 사용한다.


정규 표현식에 해당하는 패턴이 발견되면 발견된 인덱스를 돌려주고, 없으면 -1을 반환한다.


<html>

<head>

<title>:: String.search() 메서드 ::</title>

<script type="text/javascript">

document.addEventListener("DOMContentLoaded", function() {


// 대상 문자열

var str = "zip:999-999, mail:a@example.com";


// 우편번호 검색

console.log("우편번호 검색 : ", str.search(/\d{3}-\d{3}/));

// 이메일 검색

console.log("이메일 검색 : ", str.search(/\w+\@\w+\.\w+/));

// URL 검색

console.log("URL 검색 : ", str.search(/https?:\/\//));

});

</script>

</head>

</html> 




수행결과는 아래와 같다.









#06. String.replace( ) 메서드



정규 표현식으로 치환을 수행하는 replace( ) 메서드는 두 가지 형태의 사용법이 있다.



① 정규 표현식을 이용한 치환


 str.replace( 정규 표현식, 치환될 문자열 )



실제 코드를 통해 사용법을 파악하자.


<meta charset="utf-8">

<html>

<head>

<title>:: String.replace() 메서드 ::</title>

<script type="text/javascript">

document.addEventListener("DOMContentLoaded", function() {


// 대상 문자열

var str = "Today 10per OFF";

// 숫자를 30으로 치환

console.log("숫자를 30으로 치환 : ", str.replace(/\d+/, "30"));

// 숫자와 이어지는 영문 소문자까지 치환

console.log("숫자와 이어지는 영문 소문자까지 치환 : ", str.replace(/\d+[a-z]+/, "500won"));

// 알파벳을 전부 지우고 숫자만을 남긴다.

console.log("알파벳을 전부 지우고 숫자만을 남김 : ", str.replace(/[a-zA-Z]+/g, ""));

});

</script>

</head>

</html> 






치환될 문자열 내에 특수한 치환 패턴을 포함할 수 있다.



 ▼ 치환될 문자열에 사용되는 특수 기호

패턴

설   명

 $$

 · 문자 '$'를 삽입한다.

 $&

 · 매치된 부분 문자열을 삽입한다.

 $`

 · 매치된 부분 문자열 직전의 문자열을 삽입한다.

 $'

 · 매치된 부분 문자열 직후의 문자열을 삽입한다.

 $1$2$3…

 · 괄호로 묶인 부분 문자열을 삽입한다.



<html>

<head>

<title>:: String.replace() 메서드 ::</title>

<script type="text/javascript">

document.addEventListener("DOMContentLoaded", function() {


// 대상 문자열

var str = "Today 10per OFF";

// 숫자를 30으로 치환

console.log("숫자를 30으로 치환 : ", str.replace(/\d+/, "30"));

// 숫자와 이어지는 영문 소문자까지 치환

console.log("숫자와 이어지는 영문 소문자까지 치환 : ", str.replace(/\d+[a-z]+/, "500won"));

// 알파벳을 전부 지우고 숫자만을 남긴다.

console.log("알파벳을 전부 지우고 숫자만을 남김 : ", str.replace(/[a-zA-Z]+/g, ""));

});

</script>

</head>

</html>  






② 콜백함수를 사용하여 치환



콜백 함수를 사용하는 replace( ) 메서드의 사용법을 알아보자.



 str.replace( 정규표현식, 치환 함수 ) 



문자열 str안의 정규 표현식에 일치하는 문자열에 대해 치환 함수가 수행된다.


그러면 수행된 치환 함수의 반환 값으로 치환된다.


직접 프로그램으로 확인해 보자.


다음은 영어 단어의 소문자를 대문자로 치환하는 예이다.



<html>

<head>

<title>:: String.replace() 메서드 ::</title>

<script type="text/javascript">

document.addEventListener("DOMContentLoaded", function() {


// 대상 문자열

var str = "piano GUITAR";

// 대소문자를 소문자로 치환

var txtstr.replace(/[a-z]+/g, function(v) {

return v.toUpperCase();

});

document.getElementById("instrument").innerHTML = txt;

});

</script>

</head>

<body>

<h1 id="instrument"></h1>

</body>

</html>



위 프로그램을 실행하면 "PLANO GUITAR"라고 표시된다.






콜백 함수를 사용하면 단순한 치환이 아닌 복잡한 치환까지도 자유롭게 프로그래밍 할 수 있다.


아래 코드는 텍스트 중에서 숫자를 찾아서 세금에 해당하는 값에 8%를 더한 값으로 치환하는 프록램이다.




<html>

<head>

<title>:: String.replace() 메서드 ::</title>

<script type="text/javascript">

document.addEventListener("DOMContentLoaded", function() {


// 대상 문자열

var str = "price : 100 won";

// 금액에 해당하는 문자열을 찾아서, 세금 8%를 더하여 치환

var txt = str.replace(/\d+/, function(v) {

v = parseInt(v);

return Math.ceil(1.08 * v);

});

document.getElementById("price").innerHTML = txt;

});

</script>

</head>

<body>

<h1 id="price"></h1>

</body>

</html>  




프로그램을 실행하면 "price : 108 won"으로 표시된다.











Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[JavaSccript] 콤마(,)로 구분된 문자를 배열로 합치기[JavaSccript] 콤마(,)로 구분된 문자를 배열로 합치기

Posted at 2019.02.24 15:16 | Posted in JavaScript & jQuery/JavaScript




참고 : https://cloudless.tistory.com/53




■ 문자열을 배열로 바꾸는 예제





# 소스 코드

<html>

<head>

<title>:: JAVASCRIPT EXPLODE ::</title>

<style type="text/css">

.raceQueen {

text-align : center;

margin-bottom : 5px;

}

</style>

<script type="text/javascript">

document.addEventListener("DOMContentLoaded", function() {

// 콤마( , )로 구분되는 문자열을 나열한다.

var modelText = "최슬기, 한가은, 송주아, 유다연, 한지은, 김하율, 박소유, 서진아, 최별하, 서한빛";

// 콤마( , )로 구분되는 문자열을 배열로 만든다.

var arrModelmodelTextsplit(",");

for(var num in arrModel) {

// trim( ) 함수를 사용하여 공백을 제거한다.

var raceQueenarrModel[num].trim();

document.getElementsByClassName("raceQueen")[num].value = raceQueen;

}

});

</script>

</head>

<body>

    <h3>Race Queen ~~!!</h3>

    <input type="text" class="raceQueen" value=""/><br/>

    <input type="text" class="raceQueen" value=""/><br/>

    <input type="text" class="raceQueen" value=""/><br/>

    <input type="text" class="raceQueen" value=""/><br/>

    <input type="text" class="raceQueen" value=""/><br/>

    <input type="text" class="raceQueen" value=""/><br/>

    <input type="text" class="raceQueen" value=""/><br/>

    <input type="text" class="raceQueen" value=""/><br/>

    <input type="text" class="raceQueen" value=""/><br/>

    <input type="text" class="raceQueen" value=""/>

</body>

</html> 




# 출력 결과






Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[JavaScript] 배열의 값을 콤마(,)로 분리하기[JavaScript] 배열의 값을 콤마(,)로 분리하기

Posted at 2019.02.24 15:15 | Posted in JavaScript & jQuery/JavaScript




참고 : https://cloudless.tistory.com/53




■ 배열을 문자열로 합쳐서 출력하는 예제




# 소스 코드

<html>

<head>

<title>:: JAVASCRIPT IMPLODE ::</title>

<script type="text/javascript">

  document.addEventListener("DOMContentLoaded", function() {

 

  // 1차원 배열을 선언한다.

var arrModel = new Array("XPS", "MacBook", "Spectre", "ThinkPad", "PenS", "Gram");

// 생성한 1차원 배열을 콤마( , )로 구분하는 문자열로 합친다.

var combineTextarrModel.join(", ");

document.getElementById("noteBook").value = combineText;

  });

</script>

</head>

<body>

    <h3>제조사별 대표적인 노트북 모델들은?</h3>

    <input type="text" id="noteBook" value="" style="text-align:center;width:300px;"/>

</body>

</html>




# 출력 결과






Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[JavaScript] GMT, 그리니치 표준시 구하기[JavaScript] GMT, 그리니치 표준시 구하기

Posted at 2019.01.25 01:06 | Posted in JavaScript & jQuery/JavaScript






■ 사전 지식




#01. UTC, 협정 세계시


-. UTC(영어 : Coordinated Universal Time, 프랑스어 : Temps Universel Coordonné)

-. 1972년 1월 1일부터 시행된 국제 표준시이다. UTC는 국제원자시와 윤초 보정을 기반으로 표준화되었다.

-. TC는 그리니치 평균시(GMT)에 기반하므로 GMT로도 불리기도 하는데, UTC와 GMT는 초의 소숫점 단위에서만 차이가 나기 때문에 일상에서는 혼용되어 사용된다.

※ 기술적인 표기에서는 UTC가 사용된다.




#02. GMT, 그리니치 표준시


-. GMT(Greenwich Mean Time), 그리니치 표준시는 런던을 기점으로 하고, 웰링턴에 종점으로 설정되는 협정 세계시의 기준시간대이다.
-. 기준시간대여서 그리니치 표준시중 가장 빠른 시간대이다.
-. 협정 세계표준시(UTC)가 있짐만, 아직도 영국 BBC 방송을 중심으로 GMT란 표현은 널리 쓰이고 있다.
-. 영국 런던에 소재한 그리니치 천문대를 기준으로하는 경도를 사용하기에 그리니치 천문대의 경도는 0.00이 됐다




#03. KST, 한국 표준시


-. KST(Korea Standard Time)는 대한민국과 조선민주주의인민공화국의 표준시로,

   일본 표준시와 같은 동경 135도를 기준으로 하여 UTC보다 9시간 빠른 표준시(UTC+09:00)이다.
-. 양국 모두 일광 절약 시간제는 사용하지 않고 있다.
-. 한반도의 경우 중앙을 지나는 동경 127도 30분을 기준으로 하여 처음으로 표준시(UTC+08:30)가 정해졌고,

   1908년 4월 1일부터 1911년 말까지 시행되었다.
   1912년 1월 1일에 일제 강점기의 조선총독부가 동경 135도 기준인 일본 표준시(UTC+09:00)와 동일하게 표준시를 변경하였고

   현재까지 한반도에서는 UTC+09:00를 표준시로 사용하고 있다.








■ 그리니치 표준시(GMT) 구하기




# 소스코드

<html>

<head>

<title>:: JavaScript 협정 세계시 ::</title>

<script language="javascript">

    document.addEventListener("DOMContentLoaded", function() {


        // 기본 시간 구하기

        var toTime = new Date();

        document.getElementById("toNow").innerHTML = toTime.toString();

        // KST와 UTC의 차이 - 분

        var min = toTime.getTimezoneOffset();

        document.getElementById("toMin").innerHTML = min;


        // KST와 UTC의 차이 - 시간

        var hour = toTime.getTimezoneOffset() / 60;

        document.getElementById("toHour").innerHTML = hour;

        

        // GMT(그리니치 표준시) 런던(GMT + 0) 시간 구하기

        var calGmt = toTime.setHours(toTime.getHours() + hour);

        var calGmt = new Date(calGmt);

        document.getElementById("toGmt").innerHTML = calGmt.toUTCString();

    });

</script>

</head>

<body>

    현재 한국 시간 구하기 : <span id="toNow"></span>

    <br/>

    KST와 UTC의 분 차이 : <span id="toMin"></span>

    <br/>

    KST와 UTC의 시간 차이 : <span id="toHour"></span>

    <br/>

    현재 그리니치 표준시(GMT+0)은? : <span id="toGmt"></span>

</html>




# 출력결과







Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[JavaScrpt] 파일업로드시 확장자 검사하기[JavaScrpt] 파일업로드시 확장자 검사하기

Posted at 2019.01.23 11:48 | Posted in JavaScript & jQuery/JavaScript





참고 : https://code.i-harness.com/ko-kr/q/409d5d






■ 이미지 파일 업로드시 확장자 검사하기




# 소스 코드

<html>

<head>

<title>:: JAVASCRIPT 특정 문자열 검색 ::</title>

<script type="text/javascript">

function confirmFileExtension(file) {

console.log(file);

// 정규식을 사용히여 jpg, jpeg, png, gif, bmp등 이미지파일의 확장자를 가진것을 추려낸다.

var reg = /(.*?)\.(jpg|jpeg|png|gif|bmp)$/;

  if(file.match(reg)) {

alert("해당 파일은 이미지 파일입니다.");

} else {

alert("해당 파일은 이미지 파일이 아닙니다.");

}

}

</script>

</head>

<body>

    <h3>이미지 파일 검색</h3>

    <input type="file" id="imgFile"/>

    <br/>

    <input type="button" onClick="confirmFileExtension(imgFile.value);" value="업로드"/>

</body>

</html>





# 출력 결과








Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[JavaScript] 시간이 AM 혹은 PM인지 확인하기[JavaScript] 시간이 AM 혹은 PM인지 확인하기

Posted at 2019.01.22 16:00 | Posted in JavaScript & jQuery/JavaScript




참고 : https://electronic-moongchi.tistory.com/83

참고 : https://code.i-harness.com/ko-kr/q/87a0ab




■ 현재 시간이 오전인지 오후인지를 나타내는 함수




# 소스 코드

<html>

<head>

<title>:: JAVASCRIPT 날짜 출력 ::</title>

<script type="text/javascript">

  document.addEventListener("DOMContentLoaded", function() {


    // 브라우저의 현재 날짜를 받아온다.

    var toMeridiemnew Date();

    document.getElementById("toMeridiem").value = toMeridiem.ampm();

  });


  // 현재 날짜값을 오전 or 오후 문자로 변환해주는 함수

  Date.prototype.ampm = function() {

      var hours = this.getHours() < 12 ? "오전" : "오후";

      // var hours = this.getHours() < 12 ? "AM" : "PM";

      return hours;

  }

</script>

</head>

<body>

    <h3>지금은 오전 or 오후 인가?</h3>

    <input type="text" id="toMeridiem" style="text-align:center;"/>

</body>

</html>





# 출력 결과






관련포스팅 : [JavaScript] 날짜 자동 포맷 함수





Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[JavaScript] 날짜 자동 포맷 함수[JavaScript] 날짜 자동 포맷 함수

Posted at 2019.01.11 18:22 | Posted in JavaScript & jQuery/JavaScript




웹 프론트 개발중에서는 항상 날짜를 특정한 형태의 포맷으로


화면에 나타내야 하는 경우가 잦다.


그때만다 Date() 함수등을 사용하여 정리하기는 너무 번거로운일이다.


아래 포스팅은 사용자 표현식 함수로 미리 날짜 포맷을 자동으로 맞춰주는 기능이다.





■ YYYY-MM-DD 형식으로 날짜 포맷하기





해당 코드는 기본 날짜값을 년 - 월 - 일 형식으로 바꿔준다.




# 소스 코드

<html>
<head>
<title>:: JAVASCRIPT 날짜 출력 ::</title>
<script type="text/javascript">
  document.addEventListener("DOMContentLoaded", function() {

    // 브라우저의 현재 날짜를 받아온다.

    var toDay = new Date();
    document.getElementById("toYmd").value = toDay.yyyymmdd();
  });

  // 현재 날짜값을 yyyy-mm-dd 형식으로 변환해주는 함수
  Date.prototype.yyyymmdd = function() {
      var yyyy = this.getFullYear().toString();
      var mm = (this.getMonth() + 1).toString();
      var dd = this.getDate().toString();
      return  yyyy + "-" + (mm[1] ? mm : "0" + mm[0]) + "-" + (dd[1] ? dd : "0" + dd[0]);
  }
</script>
</head>
<body>
    <h3>금일 날짜는(YYYY-MM-DD)?</h3>
    <input type="text" id="toYmd" style="text-align:center;"/>
</body>
</html>




# 출력 결과












■ HH:MM:SS 형식으로 시간 포맷하기





#01. 00시 ~ 24시 단위로 나타내기




해당 코드는 기본 날짜값을 시 : 분 : 초 형식으로 바꿔준다.




# 소스 코드

<html>
<head>
<title>:: JAVASCRIPT 시간 출력 ::</title>
<script type="text/javascript">
  document.addEventListener("DOMContentLoaded", function() {

    // 브라우저의 현재 시간을 받아온다.
    var toTime = new Date();
    document.getElementById("toHms").value = toTime.hhmmss();
  });

  // 현재 시간값을 hh:mm:ss 형식으로 변환해주는 함수
  Date.prototype.hhmmss = function() {
      var hh = this.getHours().toString();
      var mm = this.getMinutes().toString();
      var ss = this.getSeconds().toString();
      return (hh[1] ? hh : "0" + hh[0]) + ":" + (mm[1] ? mm : "0" + mm[0]) + ":" + (ss[1] ? ss : "0" + ss[0]);
  }
</script>
</head>
<body>
    <h3>현재 시간은(HH:MM:SS)?</h3>
    <input type="text" id="toHms" style="text-align:center;"/>
</body>
</html>




# 출력 결과





#02. AM, PM 12시간 단위로 나타내기




위에서 24시간 개념으로 시간을 출력하는것을 만들어 보았다면


이제 오전, 오후로 구분할 수 있는 12시간 개념으로 숫자를 표현해 보고자 한다.




# 소스 코드

<html>
<head>
<title>:: JAVASCRIPT 시간 출력 ::</title>
<script type="text/javascript">
  document.addEventListener("DOMContentLoaded", function() {

    // 브라우저의 현재 시간을 받아온다.
    var toTime = new Date();
    document.getElementById("toHms").value = toTime.hhmmss();
  });

  // 현재 시간값을 hh:mm:ss 형식으로 변환해주는 함수
  Date.prototype.hhmmss = function() {
      var hh = (hourthis.getHours().toString() % 12) ? hour : 12;

      hh = hh.toString();
      var mm = this.getMinutes().toString();
      var ss = this.getSeconds().toString();
      return (hh[1] ? hh : "0" + hh[0]) + ":" + (mm[1] ? mm : "0" + mm[0]) + ":" + (ss[1] ? ss : "0" + ss[0]);
  }
</script>
</head>
<body>
    <h3>현재 시간은(HH:MM:SS)?</h3>
    <input type="text" id="toHms" style="text-align:center;"/>
</body>
</html>




# 출력 결과





오전 or 오후, AM or PM을 표기하기 위한 함수는 따로 포스팅을 해두었다.


필요하다면 아래 링크를 참고하면 된다.





관련포스팅 : [JavaScript] 시간이 AM 혹은 PM인지 확인하는 함수













문자형 YYYY-MM-DD HH:MM:SS 형식, DATE 형변환






위에서 YYYY-MM-DD, HH:MM:SS 형식으로 날짜값을 변환하여 출력할 수 있게 만들어 보았다.


그렇지만 개발이란게 꼭 이대로 끝나지 않고.


위와 같이 만든 형태를 다시 날짜형으로 변환 시켜주어야 하는 경우가 꼭 발생한다.


아래 코드를 이용하여 YYYY-MM-DD HH:MM:SS 혁식으로 된 날짜 값을 다시


자바스크립트의 날짜형으로 변환 시켜 보자.



# 소스 코드

<html>

<head>

<title>:: JAVASCRIPT 날짜 변환 ::</title>

<script type="text/javascript">

  document.addEventListener("DOMContentLoaded", function() {


    // 강제로 YYYY-MM-DD HH:MM:SS 형식으로 날자값을 변수에 담는다.

    var txtDate = "2019-01-14 11:24:32";

    document.getElementById("convertTime").value = dateConvert(txtDate);

  });


  // 문자 YYYY-MM-DD HH:MM:SS값 날짜형으로 형변환

  var dateConvert = function(date) {

      var yeardate.substring(0, 4);

      var monthdate.substring(5, 7);

      var daydate.substring(8, 10);

      var hourdate.substring(11, 13);

      var minutedate.substring(14, 16);

      var seconddate.substring(17, 19);

      return new Date(yearmonthdayhourminutesecond);

  }

</script>

</head>

<body>

    <h3>현재 시간은?</h3>

    <input type="text" id="convertTime" style="text-align:center;width:350px;"/>

</body>

</html>




# 출력 결과








Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[JavaScript] 더블 클릭 이벤트 방지[JavaScript] 더블 클릭 이벤트 방지

Posted at 2018.12.29 17:32 | Posted in JavaScript & jQuery/JavaScript




참고 : http://cofs.tistory.com/270




해당 코드는 제목대로 사용자의 더블 클릭 이벤트가 발생하였을 경우 예외처리가 가능하다.


그렇지만 윈도우 바탕화면의 실행 아이콘을 더블 클릭하는것과 같이.


빠르게 더블 클릭하는것을 예외 처리하는 코드가 아니라는것을 우선 밝혀두는 바이다.


그저 그런 이벤트를 막기위한 한가지 꼼수라고 생각하고 포스팅을 보길 바란다.







■ 짝수 클릭의 경우 예외 처리하기




특정 이벤트 실행시 더블 클릭을 방지하기 위해서 제작되었다.


위 코드의 원본은 http://cofs.tistory.com/270 포스팅을


현재 필자가 진행한 프로젝트에 맞게 수정한 내용이다.




해당 코드를 사용시 주의할 점이 존재하기에 우선 그 부분을 먼저 설명하고자 한다.


# 주의사항


      진짜 더블 클릭을 예외처리하는 코드가 아니다,

         실제로는 짝수번째의 클릭시 이벤트를 막는다.


      해당 기능은 한 페이지에서 하나의 이벤트만이 수행 가능하다.

         복수의 이벤트에서 사용하려면 추가적인 로직을 구현하는 작업이 필요하다.






# 소스 코드

<html>
<head>
<title>:: JAVASCRIPT 더블 클릭 방지 ::</title>
<script type="text/javascript">

  // 시작과 동시에 선언될 익명 선언식 함수를 사용한다.
  // 익명 선언식 함수를 사용한 이유는
  // doubleFlag 변수를 전역으로 사용하는것을 피하기 위해서다.
  (function() {

    // doubleFlag는 처음에 false로 초기화 한다.
    var doubleFlag = false;

    // 더블 클릭 함수 생성
    this.doubleCheck = function doubleCheck() {
      if(doubleFlag == true) {
        return doubleFlag;
      } else {
        doubleFlag = true;
        return false;
      }
    }

    // 더블 클릭된 이벤트가 발생이후 다시 버튼을 초기화 하기 위해 사용된다.
    this.clickInitial = function clickInitial() {
      doubleFlag = false;
    }
  })();

  // 클릭 이벤트
  function clickSubmit() {

    // 더블 클릭한 경우
    if(doubleCheck() == true) {

      alert("2번클릭");


      // 다시 정상적으로 클릭이벤트가 발생 할 수 있도록 초기화 요청
      clickInitial();
      return;
    }

    // 한번만 클릭한 경우
    else {
      alert("1번클릭");
    }
  }


</script>
</head>
<body>

    <h3>더블 클릭 이벤트 예외 처리하기</h3>

    <input type="button" onClick="clickSubmit();" value="검사"/>
</body>
</html>



# 출력 결과






Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기