체크박스를 여러개 선택해서 값을 넘길려고 할 때 아래와 같이 box[ ] 배열로 만들어서 바로 서버로 넘겨도 된다.

서버에서 반복문으로 푸는 방법과 스크립트에서 반복문으로 풀어서 서버로 넘기는 방법이 있다.


아래와 같은 체크박스 태그가 반복문을 통해 여러개 있을 경우 태그명을 class를 이용해야 한다.(id는 유일한 이름)

<input type="checkbox" name="box[]" value="a" class="checkSelect">

<input type="checkbox" name="box[]" value="b" class="checkSelect">

<input type="checkbox" name="box[]" value="c" class="checkSelect">

<input type="checkbox" name="box[]" value="d" class="checkSelect">

<input type="checkbox" name="box[]" value="e" class="checkSelect">

box[0].val() => a

box[1].val() => b

box[2].val() => c


이러한 형태로 되어있는 것을 

아래 코드를 통해 id=array라는 태그의 value 값으로 a,b,c,d,e 의 형태로 넣는다.


<script>
var send_array = Array();
var send_cnt = 0;
var chkbox = $(".checkSelect");

for(i=0;i<chkbox.length;i++) {
    if (chkbox[i].checked == true){
        send_array[send_cnt] = chkbox[i].value;
        send_cnt++;
    }
}

$("#array").val(send_array);
</script>

send_array라는 배열 변수를 선언하고.

배열의 index를 넣을 send_cnt와 체크박스의 이름인 .checkSelect를 chkbox라는 변수로 선언을 한다.


for문을 이용해서 

box[0].val() => a

box[1].val() => b

box[2].val() => c        이러한 형태의 값들을 하나씩 send_array[i]에 넣는다.


send_array를 출력해보면 a,b,c,d,e 와 같은 형태로 , 로 구분하여 저장된다.

그걸 value 값에 넣어 서버로 보내면 서버에서 반복문을 실행하지 않아도 여러개의 값들을 쓸 수 있다.


*a,b,c,d,e의 형태로 넘어간 값들은 SELECT, DELETE 문을 사용할때 wehre user_name in ('send_array') 와 같은 형태로 사용할 수 있다.





반응형

\'single quote
\"double quote
\\backslash
\nnew line
\rcarriage return
\ttab
\bbackspace
\fform feed


반응형

스마트 에디터에서 큰 사진을 첨부하게 되면 에디터 내에서 크게 이미지가 불러오는 경우가 있다. (서버에서 이미지를 줄일 수 있음.)


서버에서 이미지 크기를 줄이지 않고 에디터 내에서만 이미지를 줄이는 방법이 있다.



SmartEditor => photo_uploader => plugin => hp_SE2M_AttachQuickPhoto.js 에 들어가서


_getPhotoTag : function(htPhotoInfo){ // id와 class는 썸네일과 연관이 많습니다. 수정시 썸네일 영역도 Test var sTag = '<img src="{=sOriginalImageURL}" title="{=sName}" width="600px;">'; if(htPhotoInfo.bNewLine){ sTag += '<br style="clear:both;">'; } sTag = jindo.$Template(sTag).process(htPhotoInfo); return sTag; }


var sTag에서 width="600px"를 추가해준다.



반응형

게시판에서 전체 선택을 체크하는 경우가 생긴다. 

그럴 경우 맨 위에 체크박스(checkbox)를 클릭할 시 아래 체크박스들의 속성으로 checked를 넣는다는 방식으로 하면 된다.


$(document).on("click", "#checkAll", function(){
    if (! $('#checkAll').attr('checked')) {
            $('.checkSelect').attr('checked', false);
    }else{
        $('.checkSelect').attr('checked', 'checked');
    }
});


아래는 테이블의 제목인 체크박스이다.

<th><input type="checkbox" name="" id="checkAll" /></th>

<td><input type="checkbox" name="chk_box" class="checkSelect"/></td>

테이블 제목에 있는 체크박스를 클릭할 경우 #checkAll의 속성에 checked가 없을 경우 나머지 체크박스들의 checked를 false로 바꾸고(선택 해제)

만약 체크되어있다면 체크박스들의 속성을 checked, checked로 넣는다는 것이다.(전체 선택)



만약 전체 선택 후에 개별 체크부분을 누를 경우 전체 선택이 해제되야되기 때문에 그 부분도 스크립트를 넣어야한다.


$(document).on("click", ".checkSelect", function(){
    $("#checkAll").attr('checked', false);
});


.checkSelect (개별선택)을 클릭(해제)했을 경우 #checkAll(전체선택)의 속성에서 checked를 false로 선택해제한다.




반응형
<select id="customSelect" onchange="SetSelectBox();">
    <option value="title">전체</option>
    <option value="board_title">제목</option>
    <option value="reg_id">작성자</option>
</select>


select box에서 항목을 선택할 경우 onChange로 스크립트에 SetSelectBox() 함수를 실행한다.


function SetSelectBox(){ var schField = $("#customSelect option:selected").text(); //전체, 제목, 작성자 }


다음과 같이 $("#customSelect option:selected").text()를 하면 "제목"이라는 텍스트를 가져온다.


function SetSelectBox(){ var schField = $("#customSelect option:selected").val(); // title, board_title, reg_id }


$("#customSelect option:selected").val()을 쓸 경우 "board_title"을 가져온다.




특정 값을 받고 그 부분을 선택하는 옵션을 넣고 싶은 경우 아래와 같이 한다.


if(schField == "제목"){
    $("#customSelect").val("board_title").prop("selected", true);
}


schField 값이 "제목"일 경우 board_title의 값을 가진 부분에 selected 옵션을 추가한다.



반응형

다중 파일첨부한 내용을 표현할때 반복문을 사용하여 태그를 추가한다. 이때 같은 태그를 반복하기 때문에 같은 클래스명으로 추가 된다. 따라서 스크립트를 사용할때 제약이 걸린다. 


이때 태그 안에 data-item을 사용한다.(아래 div 코드가 여러개 존재)


<div id="file_div_<?= $row['file_no'] ?>">
    <input type="button" id="<?= $row['file_no'] ?>" onclick="del_file(this)" 
    data-item="<?= $row['file_no'] ?>" value="삭제하기">
</div>



반복문으로 여러개가 추가 됐을 input 태그에서 onclick으로 아래의 함수를 실행하고 자바스크립트로 값을 받아오고 로직을 처리한다.

function del_file(file_no){
    var file_no = file_no.getAttribute("data-item");
    console.log(file_no);
    $("#file_div_"+file_no).remove();
    $("#delete_file_list_div").append('<input name="delete_file[]" type="hidden" value="'+file_no+'" id="delete_file"/>');
}



반응형

스마트에디터를 사용한 Textarea의 빈값(유효성)을 체크하는 부분은 아래 코드를 사용합니다.



    function submitContents() {
        var elClickedObj = $("#form");
        oEditors.getById["ir1"].exec("UPDATE_CONTENTS_FIELD", []);
        var ir1 = $("#ir1").val();

        if( ir1 == ""  || ir1 == null || ir1 == '&nbsp;' || ir1 == '<p>&nbsp;</p>')  {
             alert("내용을 입력하세요.");
             oEditors.getById["ir1"].exec("FOCUS"); //포커싱
             return;
        }

        try {
            elClickedObj.submit();
        } catch(e) {}
    }



반응형

모든 공백 정규식

var regExp = /\s/g;


숫자 정규식

var regExp = /^[0-9]+$/;


이메일 정규식

var regExp = /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i; 


핸드폰 번호 정규식

var regExp = /^\d{3}-\d{3,4}-\d{4}$/;


일반 전화번호 정규식

var regExp = /^\d{2,3}-\d{3,4}-\d{4}$/;


아이디나 비밀번호 정규식 

var regExp = /^[a-z0-9_]{4,20}$/; 


휴대폰 번호 체크 정규식 

var regExp = /^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4})$/;


반응형

<input type="text" id="postCode" name="postCode" id="postCode" placeholder="우편번호" />&nbsp;&nbsp;&nbsp;<input type="button" value="우편번호 찾기&nbsp;" onClick="execDaumPostCode()"><br/> <input type="text" id="roadAddress" name="roadAddress" id="roadAddress" placeholder="도로명주소"/> <input type="text" id="detailAddress" name="detailAddress" id="detailAddress" placeholder="상세주소"/> <!-- iOS에서는 position:fixed 버그가 있음, 적용하는 사이트에 맞게 position:absolute 등을 이용하여 top,left값 조정 필요 --> <div id="layer" style="display:none;position:fixed;overflow:hidden;z-index:1;-webkit-overflow-scrolling:touch;"> <img src="//i1.daumcdn.net/localimg/localimages/07/postcode/320/close.png" id="btnCloseLayer" style="cursor:pointer;position:absolute;right:-3px;top:-3px;z-index:1" onclick="closeDaumPostcode()" alt="닫기 버튼">

위와 같이 태그를 추가. 


onClick="execDaumPostCode()


아래 스크립트의 함수를 실행시킨다. 변수명 일치 시키는게 중요.

<!-- 우편번호 찾기 -->
<script src="http://dmaps.daum.net/map_js_init/postcode.v2.js"></script>

다음 우편번호 찾기 api를 추가하고.


수정할 부분은 html 태그의 id 이름과 api 안에 id값을 일치시키기만 하면 된다.



중간에 


document.getElementById('postCode').value = data.zonecode; //5자리 새우편번호 사용 document.getElementById('roadAddress').value = fullAddr; document.getElementById('detailAddress').focus();



document.getElementById안의 값인 postCode, roadAddress, detailAddress의 값은 맨 위에 있는


<input type="text" id="postCode"

<input type="text" id="roadAddress"

<input type="text" id="detailAddress"


 input 태그의 id와 동일하게 해주면 저절로 입력이 된다.

<script> // 우편번호 찾기 화면을 넣을 element var element_layer = document.getElementById('layer'); function closeDaumPostcode() { // iframe을 넣은 element를 안보이게 한다. element_layer.style.display = 'none'; } function execDaumPostCode() { new daum.Postcode({ oncomplete: function(data) { // 검색결과 항목을 클릭했을때 실행할 코드를 작성하는 부분. // 각 주소의 노출 규칙에 따라 주소를 조합한다. // 내려오는 변수가 값이 없는 경우엔 공백('')값을 가지므로, 이를 참고하여 분기 한다. var fullAddr = data.address; // 최종 주소 변수 var extraAddr = ''; // 조합형 주소 변수 // 기본 주소가 도로명 타입일때 조합한다. if(data.addressType === 'R'){ //법정동명이 있을 경우 추가한다. if(data.bname !== ''){ extraAddr += data.bname; } // 건물명이 있을 경우 추가한다. if(data.buildingName !== ''){ extraAddr += (extraAddr !== '' ? ', ' + data.buildingName : data.buildingName); } // 조합형주소의 유무에 따라 양쪽에 괄호를 추가하여 최종 주소를 만든다. fullAddr += (extraAddr !== '' ? ' ('+ extraAddr +')' : ''); } // 우편번호와 주소 정보를 해당 필드에 넣는다. document.getElementById('postCode').value = data.zonecode; //5자리 새우편번호 사용 document.getElementById('roadAddress').value = fullAddr; document.getElementById('detailAddress').focus(); // iframe을 넣은 element를 안보이게 한다. // (autoClose:false 기능을 이용한다면, 아래 코드를 제거해야 화면에서 사라지지 않는다.) element_layer.style.display = 'none'; }, width : '100%', height : '100%' }).embed(element_layer); // iframe을 넣은 element를 보이게 한다. element_layer.style.display = 'block'; // iframe을 넣은 element의 위치를 화면의 가운데로 이동시킨다. initLayerPosition(); } // 브라우저의 크기 변경에 따라 레이어를 가운데로 이동시키고자 하실때에는 // resize이벤트나, orientationchange이벤트를 이용하여 값이 변경될때마다 아래 함수를 실행 시켜 주시거나, // 직접 element_layer의 top,left값을 수정해 주시면 됩니다. function initLayerPosition(){ var width = 300; //우편번호 서비스가 들어갈 element의 width var height = 460; //우편번호 서비스가 들어갈 element의 height var borderWidth = 5; //샘플에서 사용하는 border의 두께 // 위에서 선언한 값들을 실제 element에 넣는다. element_layer.style.width = width + 'px'; element_layer.style.height = height + 'px'; element_layer.style.border = borderWidth + 'px solid'; // 실행되는 순간의 화면 너비와 높이 값을 가져와서 중앙에 뜰 수 있도록 위치를 계산한다. element_layer.style.left = (((window.innerWidth || document.documentElement.clientWidth) - width)/2 - borderWidth) + 'px'; element_layer.style.top = (((window.innerHeight || document.documentElement.clientHeight) - height)/2 - borderWidth) + 'px'; } </script>

                  






참고 : http://postcode.map.daum.net/guide#usage

반응형

+ Recent posts