1
2
3
4
5
6
7
8
9
10
11
12
var a = "";
= document.create("input");
a.setAttribute('type','file');
// console.log(a) -> <input type="file/>
a.onchange= function(){
 alert("change test");
}
//test ie10
a.style.display = 'none'
document.Selector('body').appendChild(a);
 
a.click();
cs


* ie11, Edge, Chrome에서는 input type ="file" 으로 만들어진 a 변수가 onclick으로 잘 되는데


ie 10에서만 안되어서

해당 부분을 display="none"으로 안보이게 한후

body에다가 append로 붙여서 다시 생성하였더니

on click event가 생성되었다.


이런방법으로도 해결 하였지만.. 될수있으면 낮은 버전의 브라우저는 안썼으면 좋겠다. ㅠㅠ

이상한 예외처리가 너무 많아서 어렵다 ㅠㅠ 


location.reload(); // 익스에서 느림
window.location.reload(); //크롬,익스 상관없음.



둘다 새로고침을 하는 fuction 인데

그냥 location.reload(); 로 실행하면 무언가 익스에서 로딩시간이 길어지는데
widnow.location.reload(); 하면 조금 빨라진 듯한 느낌이 든다.



찾게 된 이유는
데이터 등록후 리스트 화면에서 등록된 데이터를 클릭시 새탭이 생겨서
그부분을 막기위해서 적었다.

처음부터 내가 구현한 소스가 아니라서 어떠한 원인 때문에 새탭이 생기는지는 모르겠지만.. (게시물인데 첨부파일만 들어가면 상세조회시 새탭이 생긴..)

이상하게 새로고침하고 상세조회를 하면 잘나온다.(새탭없이..)

그래서 새로고침(reload) 함수를 찾아보게 되었고

속도차이로 인해서 아래 부분
Window.location.reload()를 적어본다.



function test(){
var date = $('.date').val();
var params =$('#Form').serializeArray();
params.push({name:"date", value:date});
$.ajax({
url: "test/test.action",
data: params,
type: "POST"
}).done(function(data){
alert("tesd");
});
}


Java에서 List로 받아서 처리할때 "setRequestAttr"

로 받아서 처리하게 되는데
해당 수정할 페이지에서는 버튼을 검색하여 특정날짜값의 데이터를 받아오는 것을 수정하게 되었다.

그래서 Form에서 특정 날짜값을 input date로 받은다음에

그것을 Java에서 처리하여 Query로 넘기는데

Ajax를 보내고도.. SetRequestAttr로 처리하려고 했으니 .. 당연히 처리가 안되었다.
(기존 method 에서 return 값확인도 안해봄..)..

그래서 좀 검색하다가 Ajax면 데이터를 Json으로 받아야한다는것을 찾고 난후

method를 Java에서 따로 분리하여 만든다음에

처리.



1
2
3
4
5
6
7
8
public String test() throws Exception{
        //test
        String test= parameters.getString("test");
        List testList = query 호출;(해당 회사, core마다 다를거라 생각).
                
        return JSON; // return Json이 중요.
    }
 
cs


이렇게 자바에서 해당 Parameter를 Ajax에서 받아와서 쿼리를 재가공한다음
Return Json으로 넘기니

Ajax의 done 부분에서 Data가 넘어왔다.

이제 나머지는 다른 예외처리및 다른부분 수정해야겠다.

초보적인. 기초적인거라 적어본다.. 멍청하게 이런걸로 시간잡아먹다나. ㅠㅠ


resize 하던 도중 잘 안되어서 f12 개발자도구로 해당 css 건들다가


height를 강제로 줄이면 목록 line 나와서 구글링 하였더니 저렇게 속성조정이 가능하였다.


ex) 쿼리는 60줄을 뱉는데 jqgrid에서 line이40줄만 나올경우 해당 height를 조절하여 나오게 하였다.



Jqgrid 에서 height resize가 잘안될경우 강제로 css 조정



1
2
            $('#jqGridTableID).parents('div.ui-jqgrid-bdiv').css("max-height","600px");//강제로 css 조정
 
cs





참고 : https://stackoverflow.com/questions/11981174/how-to-resize-a-divs-max-height-upon-window-resize


**

input box 에서 readonly를 저장했을시 사용자가 수정을 못하게 html단에서 입력/수정이 금지하게 한다.

select box 에서도 input box의 readonly와 비슷한 disabled를 줘서 입력/수정 금지한다.


다만 select box에서 disabled 속성을 줄경우 post 통신할때 값이 안넘어가기 때문에

해당 disabeld 속성을 꼭 remove를 해줘야만 함.



ex)

1
2
3
4
5
6
7
/* INPUT */
 
//다중의 input 값을 받을때
$("input[name='test1'], input[name='test2']"'#form#).attr('readonly',true);
// 단일
$("input[name='test1'], '#form#).attr('readonly',true);
 
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/*SELECT BOX*/
//다중의 SELECT 
$("select[name='TEST1'], select[name='TEST2']", #FORM#).attr("disabled""disabled");
 
//단일
$("select[name='TEST1']]", #FORM#).attr("disabled""disabled");
 
/*그리고 이벤트 넘어갈때 disabled를 풀어줘야함*/
 

fuction POST(){
//event function  실행시
/* 다중 select*/
 $("select[name='TEST1'], select[name='TEST2']", #FORM#).removeAttr("disabled""disabled");
 
/* 단일*/
 $("select[name='TEST1'] ", #FORM#).removeAttr("disabled""disabled");
 
}
 
cs


jqGrid의 기본 이벤트인 AfterSaveCell을 통하여  입력된 값을 가져오고 틀린경우 강제로 값을 치환한다.

사용할 method 기능

 - 'getCell: 값을 가져온다.

 - setCell :  값을 넣어줌.


대략적인 사용법

 * getCell

 - $('#jqGrid').jqGrid('getCell',rowid',[JqGrid에 정의된 name명]');


  * setCell

 - $('#jqGrid').jqGrid('setCell',rowid',[JqGrid에 정의된 name명]');


soruce

1
2
3
4
5
6
7
8
9
10
afterSaveCell : function(rowid,name,val,iRow,iCol) {
 var grid = $('#jqGrid');
 var a = grid.jqGrid('getCell',rowid,'[JqGrid에 명시된 name]');  //경우에 따라 *1
 if(a == false){
   //둘중 아무거나 상관없음..$(this) 보단.. 개인적으로 grid 선언해서 사용하는걸 좋아함..
    $(this).jqGrid('setCell',rowid,'eval_num1',0);
    grid.jqGrid('setCell',rowid', '[변경될 jqGrid에 명시된 name]');
 }
}
cs



getCell로 가져온값을 if 조건에 틀린경우 setCell로 변환.



1
2
3
4
5
6
7
8
9
10
var param = $('#form').serializeArray();
for(var i =0; i< param.length; i++){    
    var param_name = param[i].name;
    var param_value = param[i].value;
    if(param_name == 'param_name' && param_value == 'param_value'){
        alert("");
        return false;
     }
}
 
cs


form의 serializeArray() 값을 console로 출력시 json 형태로 가져오게 되는데 이것을 과연 어떻게 하여 if문 분기를 태울까 하다가 구글링 하여 찾았음.


serializeArray의 수만큼 for문을 생성후 해당 부분의 name,value 를 찾고


예외처리. 하였음..



참고 url)

https://stackoverflow.com/questions/4236768/how-do-i-access-values-created-by-serializearray-in-jquery


참고 

1
2
3
4
5
6
7
var dataArray = $("#myform").serializeArray(),
    len = dataArray.length,
    dataObj = {};
 
for (i=0; i<len; i++) {
  dataObj[dataArray[i].name= dataArray[i].value;
}
cs


1
2
3
4
5
6
7
<div>
    <input type="hidden" name="data_hidden" value="${data_hidden}">
    <input type="checkbox" id="data_check" value="Y" ${data_hidden == "Y" ? "checked=checked" : ""}></input>
    <!-- 컨트롤할 문구 -->
    <div class="check_green"><span style="font-weight: bold; color:green;">checked</span></div>
    <div class="check_red"><span style="font-weight: bold; color:red;">not checked</span></div>
<div>
cs



해당 html 에서 check box 구문이 있는데

checked 되었을때 문구 날리는 부분을 연습중.


기본 default는 체크된 상태


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<script>
   // 체크된 상태이므로 green 문구를 날림
    $('.check_green').show();
    $('.check_red').hide();
 
    $('#data_check').on("change"function (){
        var _self = this;
        var check_val = $("[name='data_hidden']").val();
        if(check_val == 'Y'){
            $('.check_green').hide();
            $('.check_red').show();
        }else{
            $('.check_green').show();
            $('.check_red').hide();
        }
        $("[name='data_hidden']").val(function(){
            return $(_self).is(":checked") ? "Y" : "N";
        });
    }); 
 
 
</script>
cs


hidden 처리된 data 값에 따라 checked 상태를 날리며

change function에 따라서 문구를 나눠준다.



마지막 리턴값은 체크되거나 안되었을때 Y:N을 hidden 값에 넘겨줌.







현재날짜 영문달로 구하기.

1
2
3
4
5
6
        var engMonth = ["January""February""March""April""May""June",  "July""August""September""October""November""December"];
        var date = new Date();
        var year = date.getFullYear();
        var month = engMonth[date.getMonth()];
        var day = date.getDate();
        var current_day = day+"-"+month+"-"+year;
cs

달 가져오는 부분만 영문달로 수정하여 가져옴.

결과 : 30-May-2018


yyyy-mm 에서 mm부분만 저번달로 가져오기

1
2
3
4
5
        var year = new Date().getFullYear();
        var month = new Date().getMonth()+1;//1월 0으로 표시 막기.
        var lastMonth = month-1;
        if(lastMonth < 10){lastMonth = "0"+lastMonth }
        console.log("##"+lastMonth);
cs

1. 날짜가1월일 경우 0부터 시작하므로 +1을 더해줌
2. 저번달을 구하므로 기존 달에서 -1
3. 10보다 작을경우 '0'을 임의로 붙여 처리
결과 : 201804



1
2
3
4
5
<c:foreEach var="Start" begin="1" end="3">
    
    <c:out value="${Start.test1}"/>
 
</c:forEach>

cs




begin:시작점

end: 끝점



이렇게 설정하면 index 의 1-3 번까지 3번만 돌게 된다 (0번째는 제외하게됨)


1
2
3
4
5
<c:foreEach var="Start" begin="1">
    
    <c:out value="${Start.test1}"/>
 
</c:forEach>
cs


1번째 index 부터 forEach 시작


1
2
3
4
5
<c:foreEach var="Start" end="10">
    
    <c:out value="${Start.test1}"/>
 
</c:forEach>

cs


 10번째 까지만 출력







==================================================


내가 알고싶은건 첫번째와 끝값에만 효과를 주거나 안보이는 값을 넣고 싶었는데



1
2
3
4
5
<c:foreEach var="Start" varStatus="status">
    <c:if test="${Start.first}">첫번째의 목록만 조건화</c:if>
    <c:if test="${Start.last}">마지막의 목록만 조건화</c:if>
    
</c:forEach>
cs



이런식으로 조건화 하여 사용





 


+ Recent posts