반응형

 jquery 사용

 

1
2
3
4
5
6
7
8
9
10
11
$('.form-control').on("keydown"function(e) {
            var keyCode = e.keyCode;
            console.log(e.keyCode);
            if(keyCode === 39){ // Enter key
                if($(this).parent().next().find('input').attr('name'=== 'prdctAmt') {
                    $(this).parent().parent().next().find('input:eq(0)').focus();
                } else {
                    $(this).parent().next().find('input').focus();
                }
            }
        });

원하는 요소(ex. from=control 클래스를 가진 요소들) 에 keydown 이벤트 리스너를 추가 

4번째 if -> keyCode 가 39번(방향키 ->) 인 경우를 찾는다

그 뒤로 8번째 줄에서 내가 이동하고 싶은 input으로 focust(); 를 주면 된다.

 

5번째 줄 if의 경우는 내가 사용하는 경우로 1라인의 input 이 끝나는 지점에서는 다음 라인의 input으로 이동하도록 구현해 놓은 코드

 

 

 

순수 javascript

1
2
3
4
5
6
7
8
9
10
var formControl = document.getElementsByClassName('form-control');
        for(var i=0; i<formControl.length; i++) {
            formControl[i].addEventListener('keydown'function(e){
                var keyCode = e.keyCode;
                console.log('pushed key ' + e.key);
                if(keyCode == 39){ // Enter key
 
                }
            })
        }

 

반응형
반응형

가령 a 태그, button을 페이지 로딩 후에 강제로 클릭 되었으면 하는 경우가 있다.


이때는 jquery의 trriger 함수를 이요하면 된다.


1
$('#아이디').trigger("click");
cs



다만 a 태그의 경우 위와 같이 사용할 경우 적용이 되지 않는다.

a태그의 경우 아래와 같이 변경하여 사용한다.


1
$("#a태그아이디").get(0).click();
cs





반응형
반응형


1
2
3
4
5
6
7
8
9
<input type='hidden' id='checkvalue' value='yes'/>
 
<script>
    var data = []
    if($('#checkvalue').val() === 'yes') {
        alert("체크벨류의 값은 yes");
        data.put($('#checkvalue').val());
    }
</script>
cs


위와 같은 코드처럼 우리는 jquery를 이용하여 해당 객체를 가져오고 가져온 객체에 val()함수를 사용해서 값을 가져오는 식으로 많이 사용한다.


하지만 $를 이용하여 객체를 가져오는 경우 즉 $()를 사용하는건 함수를 사용하는 것인 것을 잘 알지 못한다

즉 $('#checkvalue').val()즉를 두번 사용한 경우 함수를 두번 호출한 경우고 잦은 함수 호출은 성능에 영향을 끼치게 된다.




1
2
3
4
5
6
7
8
9
10
<input type='hidden' id='checkvalue' value='yes'/>
 
<script>
    var data = [];
    var $checkValue = $('#checkvalue').val();
    if($checkValue === 'yes') {
        alert("체크벨류의 값은 yes");
        data.put($checkValue);
    }
</script>
cs



위처럼 jquery변수에 한번 값을 불러온 뒤 jquery변수를 계속 해서 사용하는 것이 좋은 방법이다.


jquery는 자바스크립트를 빠르고 간단하게 사용 할 수 있다는 장점을 가지고 있지만,

반대로 jquery 내부적으로 그만큼 많은 작업을 수행하고 있다는 점에서 자바스크립트만 사용한 것보다 약 10배 이상은 느리다는 단점이 있다.



jquery 뿐만 아니라 javascript를 사용할 때도 

예를 들어 반복문을 사용할 때 

반복문을 실행할 lenght도 변수에 넣어서 사용해야 올바른 사용 법이다.


1
2
3
4
5
6
<script>
    for (var i = 0; i < array.length; i++) { ... }
 
    var length = array.length;
    for (var i = 0; i < length; i++) { ... }
</script>
cs




해당 자료는 블로그 https://www.zerocho.com/category/jQuery/post/57c3a8821efc521700a70918

의 자료를 기초로 제작 하였습니다.

반응형
반응형


우리가 사용하는 Jquery 는 사실 상당히 느리고 브라우저에 과부하를 줄 수 있는 라이브러리다.


사실 이런 사실을 모른체 편하다는 이유로 계속 사용하였고, append()를 사용 할 때도 시간이나 성능 등을 생각지 않고 사용하였다.


append를 그냥 사용하는 것은 성능에 매우 부담이 가는 작업이다. 

아래와 같은 작업을 수행할때 브라우저는 array 크기에 맞춰 3번을 페이지를 새로 그려야 하는 작업을 수행하게 된다.

array 크기가 동적으로 늘어나 수천개가 되면 브라우저에 엄청난 성능저하를 가져오게 된다.


1
2
3
4
5
6
7
8
9
10
11
12
    <div class='test1'>
    </div>
 
    <script>
        $(function () {
            var $test1 = $('.test1');
            var array = ['aaa','bbb','cccc'];
            array.forEach(function (item) {
                $test1.append('<strong>' + item + '</strong>');
            });
        })
    </script>
cs



이때 사용할 수 있는게 jquery의 documentFragement이다.

$frag 라는 이름의 가상 메모리 공간을 만들고, 그 안에 append를 할 경우 브라우저 성능에는 지장을 주지않게 된다.

그렇게 몇번, 몇천번 append 작업을 거친 뒤 만들어진 $frag 를 우리는 원하는 test1 div 에 한번만 append 하게 되면 된다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
    <div class='test1'>
    </div>
 
    <script>
        $(function () {
            var $test1 = $('.test1');
            var $frag = $(document.createDocumentFragment());
            var array = ['aaa','bbb','cccc'];
            array.forEach(function (item) {
                $frag.append('<strong>' + item + '</strong>');
            });
            $test1.append($frag);
        })
    </script>
cs



해당 작업은 평소 개발하면서 append 함수를 많이 사용하는데 위의 잘못된 방식으로 개발을 해오고 있어

고찰 하고자 블로그로 작성하게되었다.


해당 내용은 아래의 블로그 내용을 참조로 작성하였습니다.

https://www.zerocho.com/category/jQuery/post/57c3a8821efc521700a70918


반응형
반응형
1
2
<input type="radio" name="rdoOptionFlag" value="Y"> <s:message code="LBL0470" text="동의"/>
<input type="radio" name="rdoOptionFlag" value="N"> <s:message code="LBL0471" text="동의하지 않음"/>
cs


위와 같이 라디오 버튼을 구현 했을시 

jquery 를 이용하여 체크된 라디오 버튼의 값, 혹은 라디오 버튼의 체크 여부를 확인할 수 있다.


1
var rdoNecessaryFlag =$('input[name=rdoNecessaryFlag]:checked').val();
cs




위와 같이 사용하면 value 에 설정한 값을 가져올수 있다. 


만약


1
2
<input type="radio" name="rdoOptionFlag" > <s:message code="LBL0470" text="동의"/>
<input type="radio" name="rdoOptionFlag" > <s:message code="LBL0471" text="동의하지 않음"/>
cs


value 의 값을 따로 설정 하지 않을시 체크를 하지 않으면 'undefined'가 뜨게 되고

체크를 하였다면 'on' 이라는 값을 출력하게 된다.



또한 


라디오버튼, 체크박스의 체크 여부를 확인하기 위해서는 아래와 같이 사용하면 된다.


1
var rdoNecessaryChcek = $('input[name=rdoNecessaryFlag]').is(':checked');
cs

1
2
3
$('input:radio[name=이름]').is(':checked');
 
$('input:checkbox[name=이름]').is(':checked');
cs


반응형
반응형

<textarea>


<text>태그와 같은 기능을 수행하지만 

<input type='text'>, <text>는 한 줄의 텍스트를 입력 받게 된다.


반면

<textarea> 의 경우 여러 줄의 text 값을 입력 받을 때 사용하게 되는 텍스트 박스이다.





<textarea> 내의 엔터가 포함 된 text를 입력 하게 되고 해당 값을 자바스크립트 등으로 값을 출력해보면 

아래의 그림 처럼 값을 얻을수 있다.


- 화면 textarea 입력 화면



- jquery를 이용하여 textarea 값을 확인 


- textarea의 값을 자바 단에서 받은 값 




보통 우리는 화면에서 textarea의 값을 jquery를 이용하여 값을 가져오고 ajax를 통해 자바단(controller) 로 값을 던지게 된다.

이를 DB에 저장하고 추루 이 값을 그대로 출력했을때는 아래의 그림 처럼 엔터값(줄바꿈) 이 적용 안되는 것을 볼 수 있다.


이는 TEXTAREA의 값은 TEXT 값이고 이 안에서 엔터(줄바꿈) 값은 \n 으로 표현된다.

이를 <br> 로 치환하여 db 저장 하면 출력시 아래의 화면 같이 줄바꿈이 적용되어 표현이 된다.




하지만 아래 그림처럼 해당 값을 수정해야 될 경우가 있을 때는 아래처럼 줄바꿈을 나타내는 <br> 이 text로 표현 되어 나오게 된다.




이러한 경우를 다 고려 했을 때 다음과 같이 2가지 방법을 사용 할 수 있다.



1, textarea 값을 DB 저장 후 수정이 가능 할 경우 


textarea 값을 치환 없이 DB 저장 -> 수정 시에는 그대로 값을 출력,  단순 값 출력일 경우 '\n'을 <br> 태그로 수정하여 출력





2. textarea 값을 DB 저장 후 단순 출력 만 할 경우


textarea 값의 엔터값(줄바꿈) '\n' 을 <br> 로 치환 하여 DB 저장 -> 후에 DB 값 그대로 출력






반응형
반응형

load의 정의


웹 페이지의 내용을 동적으로 교체하기 위해서 Ajax로 서버에서 데이터 json 형식으로 받아 HTML 요소를 생성하여 페이지내의 원하는 위치의 

내용을 바꾸는 작업을 많이 합니다. jQuery의 .load() 메소드는 주어진 URL로부터 HTML 데이트를 받에서 jQuery 셀력터로 선택된 위에에 넣어 줌으로써 동적으로 페이지의 내용을 교체하는 작업을 간단하게 처리할 수 있도록 해줍니다.

출처: https://offbyone.tistory.com/235 [쉬고 싶은 개발자]



적용 사래 



한 페이지에서 댓글을 입력, 수정, 삭제 등의 작업을 한다. 

첫 구현은 ajax 후 페이지 리로드 되도록 작업 


$.post(url, dataParam, function (result) {
if (result.resultCode === 'success') {
alert("댓글 삭제 완료");
location.reload();
}
else {
alert("댓글 삭제 실패");
}
})


하지만 댓글의 경우 작업 하나하나마다 페이지가 리로드 되면 사용성이 현저하게 떨어지기에 해당 페이지에서 댓글 작업 이후에는 댓글 부분만 변경 되도록 수정



댓글 관련 부분을 언제나 동적으로 가져와야 되기에 따로 jsp 파일로 빼놓고 필요한 곳에서 include 시킴

<div id="comment_container">
<jsp:include page="comment.jsp"/>
</div>


댓글 입력, 삭제, 수정 등의 작업 ajax 에서 success 리턴 값을 받으면 댓글을 새로 조회하는 url을 호출 한다. 

여기서 comment_container 라는 div 안의 내용을 댓글을 조회하는 url에서 리턴 해주는 값으로 교체한다는 

load 함수를 사용한다.

$.post(url, dataParam, function (result) {
if (result.resultCode === 'success') {
alert("댓글 입력");
var url = "/echoline/reloadComment?requestNo=" + $('#click-requestNo').val() + "&requestIndex=" + $('#requestIndex').val() + "&status=" + $('#status').val();
$('#comment_container').load(url);


}
else {
alert("회원가입 실패");
}
})



load 함수의 파라미터 정의


Query .load() 메소드 사용법은 다음과 같습니다. 세 가지 인자를 가질 수 있습니다.


.load( url [, data ] [, complete ] )    반환값: jQuery


- url : 데이터를 받을 URL을 나타내는 문자열입니다.

- data : 선택적인 인자로 URL 로 요청을 보낼 때 같이 보낼 데이터로 자바스크립트 객체 또는 문자열 입니다.

- complete : 요청이 완료되면 호출되어질 콜백함수 입니다. Function( String responseText, String textStatus, jqXHR jqXHR )



출처: https://offbyone.tistory.com/235 [쉬고 싶은 개발자]

반응형

+ Recent posts