2021. 12. 1. 15:34

axios post 사용해서, 데이터 받는 부분이 있는데, 

 

다운로드 클릭후, 로딩Modal 띄우고, axios post로 데이터 받고, 닫는 프로세스인데,

 

이상하게...자꾸 로딩창이 안 없어지길래..... 계속 하는데...

 

이게, jQuery 모달 라이브러리로 모달 show 하는 시간보다, 데이터 받는 속도가 빨라서,

 

모달 뜨기전에, 벌써 다운로드까지 끝나버리는거다...

 

그래서 중간에, sleep 도 넣었는데, 안되고...

 

async await 도 썼는데.... 안되더라....ㅠㅠ

 

ajax에 있는 beforeSend 같은 axois용 인터럽트까지 썼는데..안됨.ㅠ

 

모달뜨는 시간까지 로그 찍어보니...

 

200ms 이상되는 데이터는 떴다가 사라지는데,

 

그 이하는 벌써 창 닫는거 

$('#process-modal').modal("hide");

까지 끝났는데....

이후에 show 가 먹히는거다.

 

sleep을 계속 넣어도 이게 따로 노니까... 안되고...

 

 

결국 다운로드 부분을 function으로 만들고, 

setTimeout 안에 넣어서, 200ms후에 다운로드 실행되게 돌렸다.

setTimeout(async function(){
    await excelDownload(month);
}, 200);

 

아....진짜...자바스크립트...비동기/동기.....ㅠㅠ 

엥귤러 할때도 비슷한게 있었는데....ㅠ

 

 

Posted by Tyson
2021. 8. 23. 18:21

데이터 text 길이가 너무 길어서,  

표에서 ... (점점점)  으로 보이게 하고, 데이터 값을 툴팁으로 띄어주고 싶어서

툴팁으로 만들었다.

텍스트 생략 방법은 아래 참고

https://tyson.tistory.com/45?category=859198 

 

긴문자열 생략표시(....)으로

긴문자생략 td 스타일에 저거 넣어주면, 알아서 생략됨. 뒤에는 .....으로 보임. 이거 안될때, 테이블 스타일에 이거 추가해주면 된다.

tyson.tistory.com

 

 

툴팁 만들때, 먼저, jquery, bootstrap를 추가해준다.

<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js" integrity="sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7FRNXMRBu5WHdZYu1hA6ZOblgut" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">

 

그리고, 자바스크립트에서 생성해주고,

클래스로 불러와서, 쓰면된다.

 

<script type="text/javascript">
    $(document).ready(function(){
        //tooltip 생성
        $(".tooltip_event").tooltip();
    });
</script>
 
<button class="tooltip_event" title="버튼 tooltip 입니다.">
    버튼 툴팁
</button>

 

툴립에 뜨길 원하는 텍스트는 title안에 적어주면 되고,

 

클래스에 tooltip_event를 추가해주면 된다.

 

 

 

 

 

참고, 블로그 :  https://allmana.tistory.com/96

https://kouzie.github.io/html/HTML-CSS-%ED%88%B4%ED%8C%81/#%ED%88%B4%ED%8C%81tooltip

Posted by Tyson
2021. 8. 23. 18:15

자바스크립트 같은 경우, 

 

변수 선언할때, var만 사용하였는데, 

ES2015(ES6)부터인가 생겼다.

 

간단하게 이야기하면, 

 

let은 수정 가능

const는 수정 불가능이다.

 

처음에는 그냥 var만 쓰면 되지... 굳이...라고, 생각했는데...

 

작업하다 보니, 

왠만한 변수는 다 const 로 선언하고, 필요한거만 let으로 했더니,

확실히 내가 놓치는 에러가 줄었다.

 

var도 사용 가능하지만, 

앞으로 왠만하면, const 사용을 권장한다.

 

그리고, 진짜, 변수가 바뀌어야 되는 상황에서만 let를 사용하는 방법을 권장한다.

 

 

ES6 호환 리스트에서 봐도, const, let은  거의 다 사용 가능하다.

 

https://kangax.github.io/compat-table/es6/#ie11

Posted by Tyson
2021. 8. 18. 11:18

자바스크립트 같은 경우, 

 

변수 선언할때, var만 사용하였는데, 

ES2015(ES6)부터인가 생겼다.

 

간단하게 이야기하면, 

 

let은 수정 가능

const는 수정 불가능이다.

 

처음에는 그냥 var만 쓰면 되지... 굳이...라고, 생각했는데...

 

작업하다 보니, 

왠만한 변수는 다 const 로 선언하고, 필요한거만 let으로 했더니,

확실히 내가 놓치는 에러가 줄었다.

 

var도 사용 가능하지만, 

앞으로 왠만하면, const 사용을 권장한다.

 

그리고, 진짜, 변수가 바뀌어야 되는 상황에서만 let를 사용하는 방법을 권장한다.

 

 

ES6 호환 리스트에서 봐도, const, let은  거의 다 사용 가능하다.

 

https://kangax.github.io/compat-table/es6/#ie11

Posted by Tyson
2021. 8. 13. 16:48
//Enter 처리
        $("input[type=text]").on('keyup', function(e){
            if(e.key==='Enter'||e.keyCode===13){
                $("#serarch").trigger('click');
            }
        })

텍스트 input에 값 넣고, 엔터치면, 자동으로 검색버튼 누르게 만들고 싶은데...

 

자바스크립트 부분에,

 

검색 버튼에 대한 기능을 만들고,

 

input 에 값을 쓴 다음에 엔터 치면, 검색버튼을 트리거 거는 방법이다.

 

input 중에, type이 text인 애들에서 키 입력이 있으면, 키 코드값으로, 엔터인지 확인하고, 

엔터일  경우,  search 버트 (id) 를 클릭하게 했다.

'컴퓨터 > JavaScript (jQuery)' 카테고리의 다른 글

var, let, const 차이 설명  (0) 2021.08.23
var, let, const 차이 설명  (0) 2021.08.18
ajax 전송시, this 값 가져오기  (0) 2021.06.14
값 입력할때마다 더하기  (0) 2018.08.07
Skel Css 사용하기  (0) 2018.07.04
Posted by Tyson
2021. 6. 14. 17:54

ajax 후에, 리턴 받은 값을 넣어주고 싶은데,

 

$('#id값') 를 못쓰는게, 이게, 펑션처럼 쓰는거라... 여러군데서 써야되서....this가 필요한 상황인데,

$(this) 해도 인식을 못한다..

 

ajax 후에 success 에서는 url이 this여서 안되는거였다.

 

 

                $.ajax({
                    type: "POST",
                    enctype: 'multipart/form-data',
                    url: "/ajax",
                    data: fileForm,
                    processData: false,
                    contentType: false,
                    context: this,
                    cache: false,
                    success: function (data) {
                        alert('success '+data);
                        $(this).next().val(data);
                        console.log('this value : ',$(this).next().val());
                    },
                    error: function (e) {
                        alert('fail '+e);
                    }
                })

ajax 타입에, context:this, 를 넣어줘야한다.

저거를 넣어주면, 전송후에도 $(this)로 값을 넣을수있다.

Posted by Tyson
2018. 8. 7. 17:05

jQuery에서 필드를 추가해서, 입력할때마다 전체값을 더해서 보여주고 싶었다.


예로, 노래 CD 디스크 입력 필드를 새로 만들고, 키을 입력할때마다, each로 돌면서 각각의 값들을 더한거를 보여주고 싶을때



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
        //트랙수 키 입력시
 
        $('.track').on('keyup',function(e){
 
            var Sum = 0;
 
            //.trackNo 클래스 돌면서 계산
 
           $('.tracksNo').each(function(idx,ele){
 
               //입력값 있는거만
 
               if(!isNaN(this.value)&&this.value.length!=0){
 
                   Sum+=parseInt($(ele).val());
 
                   $('#total').val(Sum);
 
               }
 
           });
 
        });
cs


isNaN은 아직 값을 입력 안한것들은 계산하면 안되어서, if문으로 값 입력된거만 넣어서 sum에 계산함.



 if(!isNaN(this.value)&&this.value.length!=0)

이게 입력값 체크 할때 생각보다 유용하다.


그리고, 여러값들을 더할때는 클래스로 지정하고, .each로 돌리면 됨.


아, parseInt 또는 parseFloat 해서 숫자 인식하게 해줘야한다.


아니면, String으로 인식해서, 문자열만 합쳐진다.




참고 사이트

http://blog.naver.com/PostView.nhn?blogId=caesar0342&logNo=20119941095

http://madebykaus.com/?p=382







Posted by Tyson
2018. 7. 4. 15:49



돌아다니다가, 진짜 마음에 드는 템플릿을 발견했다.


https://templated.co/intensify



근데, 얘가 skel 이라는 css를 사용했길래, 


보니까, 


부트스트랩이랑 좀 다른 클래스 명들을 쓰는거다.


그래서 보니까....


https://github.com/ajlkn/skel/blob/master/docs/skel.md






<div class="row">
	<div class="6u 12u$(small)">
		Content
	</div>
	<div class="3u 6u(small) 12u$(xsmall)">
		Sidebar1
	</div>
	<div class="3u$ 6u$(small) 12u$(xsmall)">
		Sidebar2
	</div>
</div>




6u같은거는 부트스트랩 col-md-6 이런거랑 같은데, 


뒤에 $ 달러표시 붙는거랑,


(small) 이런거는 이해가 안되는거다.



찾아서 보니까. 


달러표시는 여기가 마지막이라는 이야기다.


그래서,  3u$ 는 3u를 만들고, 뒤에 얼마가 남아있건, 마지막으로 인식해서,


그 다음거는 밑으로 내려보내는거다.


오~~ 이거 대박 편한거다~!!


그리고, (small) 이런거는, 


main.js 에 세팅해놓는 브레이크포인트가 있는데,


밑에 저 가로 길이까지는 small로 보는거다.



@include skel-breakpoints((
	xlarge: "(max-width: 1680px)",
	large:  "(max-width: 1280px)",
	medium: "(max-width: 980px)",
	small:  "(max-width: 736px)",
	xsmall: "(max-width: 480px)"
));




6u(small) 12u$(xsmall)


위에 같은 경우는 small 사이즈일때는 6u 사이즈로 만들어준다.


xsmall 사이즈일때는, 12u 로 만들어주고, 마지막이므로, 다음 그리드는 밑으로 내리라는 이야기다.



col-md-4 이렇게 안쓰고, 간단하고, 깔끔해서 쓰기는 좋은데....


부트스트랩의 bg-black 같은 컬러는 종류가 너무 적어서, 직접만들어주려니...너무 많아서....


Metro css에서 컬러만 다운 받아서 추가했다.


처음에 Metro All css 를 추가하니까, 충돌이 나서.... $ 명령어가 안 먹히는거다.


https://metroui.org.ua/colors.html



그래서, metro color 가 따로 있어서, 걔만 다운받아서 추가해 주었다.


        <link rel="stylesheet" href="css/metro-colors.css /">


bg-black, bg-red 같은 컬러도 다 먹히고, 이걸로 써봐야 겠다~ㅎㅎ

Posted by Tyson
2018. 5. 28. 18:40



팝업을 디비에서 불러와서 Modal에서 다 보여주고 싶은데, 그냥 창 띄우는거 말고, Modal로 작업하는법이다.


이건 좀 노가다 성이 있음...


밑에처럼 모달로 겹치게 뜨게 하고, 클릭해서 움직일수있게 만들고 싶다.


이 팝업의 순서는 

DB에서 원하는 값들을 가져와서 Loop를 돌면서 modal 를 생성해서, 숨겨놓고, 쿠키 값이 없으면 보여준다.


페이지 로드 => DB조회 값 가져옴 => 모달생성 => 쿠키 확인 => 쿠키에 없는거만 보여줌 


머, 이런식이다. 각 모달 id값을 게시판 번호로 붙여서 여러개 만들었다.

(이 방법을 추천하진 않는데.... 다른 방법은 복잡해서...그냥 이렇게 했다.)





먼저, 움직이게 하기 위해서는 jquery-ui.js 를 추가하고, draggable() 쓰면 된다.



jquery-ui 추가


1
2
3
4
5
6
7
8
9
 
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
 
<script>
    $(document).on('ready'function () {
    //모달 움직이게 하려면, draggable(); 하면 된다.
       $("#popup_no").draggable();
    });
</script>
cs



나같은 경우는 jstl로 디비에서 불러온 값을 넣어줄거다.

그래서 db에 있는 값들을 forEach써서, 모달로 다 만들어 준다.


style="display:none;" 이 있는데, 처음에 모달은 만들어 놓기는 하고, 안보이게 해놓았다. 


그리고, "오늘 더이상 열지 않기" 쿠키값이 없으면 보여주고, 있으면 안보여주게 만들었다.




모달 만들기


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!--jstl로 값 불러와서 Loop돌려서 모달 만듬-->
  <c:forEach var="popup" items = "${list}" varStatus="status">
<!--여긴모달부분-->
     <div class ="popup" id ="popup_${popup.no}" style="display:none; position:absolute; top:${(status.count-1)*100+150}px; left:${(status.count-1)*150+100}px; width:470px; height:445px; border:1px solid #ccc; background-color:#ffffff; z-index:100">
          
          <div style="background-color:#DDDDDD; padding-bottom:10px; padding-top:10px; text-align:center;"><span><Strong>${popup.memoTitle}</Strong></span></div>
          <div style="overflow-y:scroll; padding:10px; width:469px; height:363px;"
        ${popup.memo}
          </div>
          <div style="cursor:pointer;background-color:#DDDDDD;text-align: center;padding-bottom: 10px;padding-top: 10px;">
              <span class="pop_bt_nomore" onClick="close_pop_allday(true, ${popup.no});">
                  오늘 더이상 열지 않기
              </span>
                |  
              <span class="close_popup" onClick="close_pop_allday(false, ${popup.no});" >
                   닫기
              </span>
          </div>
     </div> <!--End Modal-->
  </c:forEach>
cs


위에 모달은 맨 처음 사진처럼 만들어준다.


스타일에 보면, 

top:${(status.count-1)*100+150}px; left:${(status.count-1)*150+100}px;


위에처럼 써놓은게 있는데,


이건, status는 순서대로 가져오는 값의 인덱스 번호라고 생각하면 된다. 1,2,3,4, 이렇게 값이 있으므로,


애들 가지고, 계산해서, 처음 보이는 위치를 세팅해주었다.




그리고, "닫기", "오늘 더이상 열지 않기" 눌렀을 시에, 않보이게 하는거다.


그리고, "오늘 더이상 열지 않기" 클릭시에는 쿠키까지 생성해 놓는다.



자, 밑에 설명을 하자면,


close_pop_allday 라는 펑션을 만들었다.


그리고, 그냥 닫기 눌렀을때는 false 값을


오늘 그만보기 눌렀을때는 true 값을 받는다.


그리고, 받을때, popup_no 를 같이 받아서, 번호를 가지고 세팅한다.


setCookie 펑션은 퍼온거임.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<script>
 
      //Cookie Setting
        function setCookie(cookie_name, value, days) {
           var exdate = new Date();
           exdate.setDate(exdate.getDate() + days);
           // 설정 일수만큼 현재시간에 만료값으로 지정
           var cookie_value = escape(value) + ((days == null) ? '' : ';    expires=' + exdate.toUTCString());
           document.cookie = cookie_name + '=' + cookie_value;
         }
 
          //팝업 Close 기능
        function close_pop_allday(flag, popup_no) {
           _this = $(this);
           var popupString = "popup"+popup_no;
 
             if ( flag == true ) {
            //쿠키세팅(그냥닫기 오늘안보기)
                setCookie("popup"+popup_no,"end",1);
                $("#popup_"+popup_no).hide();
             }else{
        //false로 들어오면 그냥 숨기기만
                 $("#popup_"+popup_no).hide();
             }
        };
 
    $(document).on('ready'function () {
 
          //팝업 쿠키확인후 보여주기
          <c:if test="${null ne list}">
              <c:forEach var="popup" items = "${list}" varStatus="status">
                  var popup_no = ${popup.no};
                  if ($.cookie('popup'+popup_no)!="end"){
                      //쿠키없는거만 보여주기
                      $("#popup_"+popup_no).show();
                      $("#popup_"+popup_no).draggable();
                  }
              </c:forEach>
          </c:if>
 
    });
 
</script>
cs


예로, 게시물 번호가 11, 12 이다. 


그리고,  $(document).on('ready'function () 

 안에 넣어준다. document 안에 넣어주면 로드할때 항상 실행한다.

그리고, forEach로 돌면서, 쿠키명 popup11, popup12 쿠키가 있는지 확인하고, 

없으면, show 해서 보여주는거다.



 $("#popup_11").show();
 $("#popup_11").draggable();

$("#popup_12").show();
$("#popup_12").draggable();


그리고, draggable해서 움직이면서 뒤에꺼도 볼수있게 해주는거다.


생성된 태그를 보면 위에처럼 되어있을거다.


id값을 저렇게 남발하는게 안좋다고는 하는데, 모달로 여러개 띄우줄때는 이게 젤 간편한 방법인거 같다.







'컴퓨터 > JavaScript (jQuery)' 카테고리의 다른 글

값 입력할때마다 더하기  (0) 2018.08.07
Skel Css 사용하기  (0) 2018.07.04
jQuery에서 따옴표 처리하기  (0) 2018.05.24
정규식 패턴 종류  (0) 2018.04.27
사업자 등록번호 체크방법  (0) 2018.04.24
Posted by Tyson
2018. 5. 24. 16:24



DB에서 값을 가져와서, 수정 페이지를 만드는데, input value에 값을 넣는데,


데이터에 "(큰따옴표)  '(작은따옴표) 같은게 있으면, 앞에서 value를 잘라 버려서, 따옴표는 특수문자표를 써줘야한다.


&quot 나 &#39 같이 써줘야한다.


그래서 스크립트에 아에 펑션을 넣어주고 값에 써주면 된다.



var entityMap = {
  '&': '&amp;',
  '<': '&lt;',
  '>': '&gt;',
  '"': '&quot;',
  "'": '&#39;',
  '/': '&#x2F;',
  '`': '&#x60;',
  '=': '&#x3D;'
};

function escapeHtml (string) {
  return String(string).replace(/[&<>"'`=\/]/g, function (s) {
    return entityMap[s];
  });
}


출처 : https://code.i-harness.com/ko/q/60f0



원하는 값에. 예로


var _name = 내 이름은 "Tyson"입니다.


<input type="text" value="escapeHtml(_name)">


위처럼 써주면, 


내 이름은 &quot;Tyson&quot;입니다.


위처럼 들어가서 제대로 보인다.


처음에는 


내 이름은 "     <= 여기에서 잘렸다.


value값이 "를 마지막으로 인식해서였다.



===


자바스크립트에서 하는 방법이고, java jstl에서는 

fn:escapeXml

을 쓰면 된다.

jstl 에서 문자열 처리법 : 

http://tyson.tistory.com/129






Posted by Tyson