728x90

객체 배열의 특징
내장객체 Array 객체를의미한다.
배열이름[인덱스] : 인덱스는0부터시작한다.
배열이름= new Array(개수); // 생성하는 방법
Arr_Name = new Array(10);

- join(): 배열을 하나의 문자열로 만들어 준다.
- sort(): 배열의 값들을 순서대로 정렬한다.
- reverse(): 배열안에 값들을 순서대로 재정렬시킨다.
- concat(): 두개 배열을 하나의 배열로 만든다.
- slice(): 배열의 일부분의 값을 추출한다.

<SCRIPT LANGUAGE="JAVASCRIPT">
array1 = new Array("사과", "배", "바나나")
document.write("<h4>" + array1.join() + "<br>")
document.write(array1.join("와") + "<br>")
document.write(array1.join("&") + "</h4>")
</SCRIPT>

<SCRIPT LANGUAGE="JAVASCRIPT">
array1 = new Array("오징어", "낙지", "문어","꼴뜨기");
array2 = array1.slice(1,3);
document.write(array2);
</SCRIPT>

블로그 이미지

Link2Me

,
728x90

자바스크립트에서 속성 읽기, 설정, 제거하는 방법이다.

<a id="target" href="http://abc.com">tutorials</a>

<script>

var t = document.getElementById('target');

t.getAttribute('href'); // href 속성의 값을 가져온다.

t.setAttribute('title', 'abcdef'); // title 속성의 값을 설정한다.

t.removeAttribute('title'); // title 속성을 제거한다.

</script>


jQuery는 HTML 요소에 대해 객체를 통하여 속성 값을 제어할 수 있는 attr()함수를 제공한다.


var 변수 = $("요소").attr("속성이름"); // 속성 값 읽기

var 변수 = $("요소").attr("속성이름","값"); // 속성 값 변경/추가


예제1

<div id="ajaxPath" data-path="<?php echo $g['path_page'].'process/'; ?>" ></div>


var loginpath =$("#ajaxPath").attr('data-path');
$.ajax({
    url: loginpath+'updateUser.php',
    type: 'POST',
    data: {
        idx:$("#memberidx").val(),
        userNM:$("#memberName").val(),
        mobileNO:$("#memberMobile").val()
    },
    dataType: "json",
    contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
    success: function (response) {
        if(response.result == 1){
            alert('수정 완료');
            location.replace('index.php'); // 화면 갱신
        } else if(response.result == 0){
            alert('수정 실패');
        }
    },
    error: function(jqXHR, textStatus, errorThrown){
        alert("ajax error : " + textStatus + "\n" + errorThrown);
    }
});


예제2

<span class="button" id="errorChk" data-uid="<?=$R['uid']?>">오류</span>


$("#errorChk").click(function(){
    uid=$(this).attr("data-uid");
    ErrorDisplay(uid);
});

function ErrorDisplay(_uid){
    $.get("ErrorChk.php", {uid:_uid}, function(data){
        $("#dialog").dialog("open").html(data);
    });
}

function ErrorChk(_uid,_mod){
    $.get("ErrorChk.php", {uid:_uid, mod:_mod}, function(data){
        $("#dialog").dialog("open").html(data);
    });
}


prop() 함수 : 선택한 요소에 속성을 반환/생성/변환한다.

주의할 점은 HTML 입장에서의 속성(attribute)이 아닌 Javascript 입장에서의 속성(property)이다.

jQuery 1.6 부터 prop()함수가 추가되어 attr()함수의 역할을 나누게 되었다.


다음 예제를 통해 결과가 어떻게 다른지 확인해보자.

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
    var prop_id = $(":text").prop("id");
    var attr_id = $(":text").attr("id");

    alert("prop id값  : " + prop_id + " , attr id값 : " +  attr_id);


    var prop_class = $(":text").prop("class");
    var attr_class = $(":text").attr("class");

    alert("prop class값 : " + prop_class + " , attr class값 : " +  attr_class);


    var prop_readonly = $(":text").prop("readonly");
    var attr_readonly = $(":text").attr("readonly");

    alert("prop readonly값 : " + prop_readonly + " , attr readonly값 : " +  attr_readonly);


    var prop_disabled = $(":text").prop("disabled");
    var attr_disabled = $(":text").attr("disabled");
    alert("prop disabled값 : " + prop_disabled + " , attr disabled값 : " +  attr_disabled);
})
</script>
</head>
<body>
<input type="text" id="text_field" class="text_class" readonly="readonly" disabled="disabled" />
</body>
</html>


prop id값  : text_field , attr id값 : text_field

prop class값 : text_class , attr class값 : text_class


prop readonly값 : true , attr readonly값 : readonly

prop disabled값 : true , attr disabled값 : disabled


<input id="chk" type="checkbox" checked="checked" />
먼저 attr 함수로 checked 속성 값을 가져오면 그 결과 값은 checked(HTML이 가지고 있는 속성의 text 값)로 나온다.
하지만, prop 함수로 checked 속성 값을 가져오면 그 결과 값은 true(속성이 실제 의미하는 값)가 된다.

먼저 attr 함수로 checked 속성 값을 가져오면 그 결과 값은 checked(HTML이 가지고 있는 속성의 text 값)로 나온다.

하지만, prop 함수로 checked 속성 값을 가져오면 그 결과 값은 true(속성이 실제 의미하는 값)가 된다.



출처: http://ggmouse.tistory.com/92 [초보개발자꽁쥐]

true / false체크 같은 것을 사용할 때 아주 유용하다.
prop가 나온후로는
$("요소").prop("checked",true);
$("요소").prop("checked",false);
로 변경을 해주어야 체크박스 핸들링이 가능하다.

블로그 이미지

Link2Me

,
728x90

jQuery 를 이용하여 input 태그명을 각각 다르게 넘기는 코드를 작성했다.

다른 코드는 동일하므로 이전 게시글(http://link2me.tistory.com/1464)을 참조하면 된다.


<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
<link rel="stylesheet" type="text/css" href="write.css" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
function checkInput(sel,item){
    if($(sel).val().trim().length == 0){
        alert(item + ' 입력하세요');
        $(sel).focus();
        return false;
    }
    return true;
}
$(document).ready(function(){
    var maxField = 5; //최대 개수
    var wrapper = $('.append');
    var extcnt = 1; // 최초 카운트 1
    $('.add_btn').click(function(){
        if(extcnt < maxField){
            extcnt++; // 숫자 증가
            var fieldHTML = '<div><input type="text" name="ext'+extcnt+'" value="" class="input" /><a href="#" class="remove_btn"><img src="./img/remove-icon.png"/></a></div>';
            $('.append').append(fieldHTML); // Add field
            $('#extcount').html("(" + extcnt + "개)");
            $('input[name="extcnt"]').val(extcnt);
        } else {
            alert('5개까지만 추가할 수 있습니다.');
            return;
        }
    });
    $(wrapper).on('click', '.remove_btn', function(e){
        e.preventDefault();
        $(this).parent('div').remove(); // Remove field
        extcnt--; // 카운트 감소
        $('#extcount').html("(" + extcnt + "개)");
        $('input[name="extcnt"]').val(extcnt);
    });
   
    $('#submit').click(function(){
        var subject =$('input[name="subject"]');
        if(subject.val().trim().length == 0){
            alert('제목을 입력하세요');
            subject.focus();
            return false;
        }
       
        var extcnt = $("input[name='extcnt']").val();// 동적 필드 생성개수 구함
        // 동적 입력 항목 입력 여부 체크
        var i;
        for(i=1; i <= extcnt;i++){
            var sel ='input[name="ext'+i+'"]';
            var item= '내용'+i;
            if(checkInput(sel,item)==false){
                return false;
            }
        };
        form.submit();
    });

});
</script>
</head>
<body>
<?php
    $R['subject'] = isset($R['subject'])? $R['subject']:'';
    $R['kor'] = isset($R['kor'])? $R['kor']:'';
?>
<form name="writeForm" method='post' action='a.write.php'>
    <input type="hidden" name="extcnt" value="1">
    <table class="table table-bordered">
        <tr>
            <td class="td1">제목</td>
            <td><input type="text" name="subject" value="<?php echo $R['subject'];?>" class="input" /></td>
        </tr>
        <tr>
            <td class="td1">내용</td>
            <td>
                <input type="text" name="ext1" value="<?php echo $R['kor'];?>" class="input" />
                <span id="extcount" style="color: #ff0000;font: 10px verdana,dotum;">(1개)</span>
                <a href="#" class="add_btn"><img src="./img/add-icon.png"/></a>
                <div class="append"></div>
            </td>
        </tr>
        <tr>
            <td colspan='2' align='center'>
                <button type="submit" id="submit" class="button">생성</button>
            </td>
        </tr>
    </table>
</form>

</body>
</html>


블로그 이미지

Link2Me

,
728x90

Input 필드를 동적으로 추가/삭제하는 코드를 실 활용 코드 수준으로 연습하고 적어둔다.

테스트에 사용한 코드

InputAddRemovejQuery.zip




<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
<link rel="stylesheet" type="text/css" href="write.css" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
    var maxField = 5; //최대 개수
    var wrapper = $('.append');
    var extcnt = 1; // 최초 카운트 1
    var fieldHTML = '<div><input type="text" name="ext[]" value="" class="input" /><a href="#" class="remove_btn"><img src="./img/remove-icon.png"/></a></div>';
    $('.add_btn').click(function(){
        if(extcnt < maxField){
            extcnt++; // 숫자 증가
            $('.append').append(fieldHTML); // Add field
            $('#extcount').html("(" + extcnt + "개)");
        }
    });
    $(wrapper).on('click', '.remove_btn', function(e){
        e.preventDefault();
        $(this).parent('div').remove(); // Remove field
        extcnt--; // 카운트 감소
        $('#extcount').html("(" + extcnt + "개)");
    });
});
</script>
</head>
<body>
<?php
    $R['subject'] = isset($R['subject'])? $R['subject']:'';
    $R['ext'] = isset($R['ext'])? $R['kor']:'';
?>
<form name="writeForm" method='post' action='a.write.php'>
    <input type="hidden" name="extcnt" value="0">
    <table class="table table-bordered">
        <tr>
            <td class="td1">제목</td>
            <td><input type="text" name="subject" value="<?php echo $R['subject'];?>" class="input" /></td>
        </tr>
        <tr>
            <td class="td1">내용</td>
            <td>
                <input type="text" name="ext[]" value="<?php echo $R['ext'];?>" class="input" />
                <span id="extcount" style="color: #ff0000;font: 10px verdana,dotum;">(1개)</span>
                <a href="#" class="add_btn"><img src="./img/add-icon.png"/></a>
                <div class="append"></div>
            </td>
        </tr>
        <tr>
            <td colspan='2' align='center'>
                <button type="submit" class="button">생성</button>
            </td>
        </tr>
    </table>
</form>

</body>
</html>

 /* write */
body {    
    font-family: 나눔바른고딕, NanumBarunGothic, 맑은고딕, "Malgun Gothic", 돋움, Dotum, "Apple SD Gothic Neo", sans-serif;
    font-size: 13px;
    color: rgb(33, 33, 33);
    letter-spacing: 0.03em;
}
.input {
    width:400px;
    text-indent: 5px;
    height: auto;  /* 높이값 초기화 */
    line-height : normal; /* line-height 초기화 */
    padding: .2em .3em; /* 상하 우좌 */
    font-family: inherit; /* 폰트 상속 */
    border: 1px solid #ccc; /* 999가 약간 더 진한 색 */
    margin-bottom:5px;
    font-size:12pt;
    border-radius: 3px;
    -webkit-border-radius: 3px;
    -moz-border-radius: 3px;
}
.button {
    background-color:#E9C28B;
    border: none;
    border-radius: 5px;
    padding: 10px 20px;
    text-align: center;
    text-decoration: none;
    display: inline-block;
    font-size: 16px;
    margin: 4px 2px;
    cursor: pointer
}
.title {
    font-family:inherit; /* 폰트 상속 */
    font-size: 13pt;
    color:black;
}

.td1 {
    width:60px;
    font-weight:bold;
    color:#444444;
    text-align : center;
    padding:5px 0 5px 0;
    letter-spacing:2px; /* 글자간 간격 */
}

 <?php
// $_POST 데이터 값만 확인하기 위한 코드
if(isset($_POST) && $_SERVER['REQUEST_METHOD'] == "POST"){
    // POST 방식으로 보낸 데이터가 있는지 체크
    extract($_POST);
    print '<pre>';
    print_r($_POST);
    print '</pre>';
}

?>


본 코드는 DB에서 읽어온 데이터를 화면에 표시하고, 데이터 수정, 추가, 삭제하는 로직이 반영된 코드는 아니다.

그냥 단순하게 name 을 배열로 받아서 여러개의 값이 어떻게 넘어가는지 확인하는 코드라고 보면 된다.

name 명칭이 다르게 생성하는 것은 아직 테스트 중이다.

블로그 이미지

Link2Me

,
728x90

each 메소드와 map 메소드의 차이점을 알아보자.


<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
var intArray = new Array(1, 2, 3, 4, 5);
$.each(intArray, function(index, element) {
  if (element === 3) {
    return false;
  }
  console.log(element);
});

$.map(intArray, function(element, index) {
  if (element === 3) {
    return false;
  }
  console.log(element);
});
</script>
</head>
<body>
</body>
</html>


위 예제를  실행해보면 결과에 차이가 난다.

$.map([], callback(elementOfArray, indexInArray))
$.each([], callback(indexInArray,
element))


callback function 의 index, element(item) 위치가 서로 반대다.

each 메소드는 index 가 먼저고, 그 다음에 element 가 온다.


each 메소드

- jQuery 객체/배열의 수 만큼 반복하고, 선택된 요소들에 함수를 실행한다.

- 배열과 length 속성을 갖는 배열과 비슷한 객체들을 index를 기준으로 반복할 수 있다.

- jQuery 유틸리티 메소드 : .each(object, function(index, element) ) { 실행 함수 }

- jQuery 일반 메소드 : $(selector).each(function(index, item){ 실행함수 })

- jQuery 객체들을 위한 반복 로직을 처리하기 이해 만들어졌다.

- each 메소드에서 this 는 current element 를 가리킨다.


each 메소드는 원래의 배열을 반환(returns the original array) 하지만,

map 메소드는 제공된 배열 데이터를 변환시켜 다시 새로운 배열 객체를 반환(returns a new array)한다.

map 메소드를 과다 사용하면 많은 메모리를 낭비할 수 있다.


$(selector).each(...) 는 selector 아이템으로 반복 처리한다.
$.map() 메소드는 selector 를 사용하지 않는다.


실행결과는

each 메소드는 조건이 false를 만나면 loop 를 break 하여 결과는 1, 2 만 나온다.

map 메소드는 조건만 skip 하여 결과는 1, 2, 4, 5 가 나온다.

블로그 이미지

Link2Me

,
728x90

jQuery map()함수는 배열 데이터를 변환시켜 새로운 배열 객체를 만든다.

jQuery 1.6 부터 Object 도 지원한다.

$.map() 함수를 사용하기 위해서는 반드시 완전한 배열로 바꿔줘야 한다.


<input type="text" name="item[1]" class="item" value="1">
<input type="text" name="item[2]" class="item" value="50">
<input type="text" name="item[3]" class="item" value="12">


jQuery.map(array, callback(elementOfArray, indexInArray) )
- array : 변환할 배열
- callback(elementOfArray, indexInArray) 모든 요소에 대해 실행될 함수.
  첫번째 인자는 배열 요소(item),
  두번째 인자는 배열 인덱스


jQuery.map(arrayOrObject, callback(value, indexOrKey))
- arrayOrObject 변환할 배열 또는 오브젝트
- callback( value, indexOrKey ) 모든 요소에 대해 실행될 함수.
  첫번째 인자는 value,
  두번째 인자는 배열 또는 오브젝트의 index 또는 key

아래 코드는 위와 같은 결과를 얻어내는 jQeury 함수와 스타일 시트다.

모양을 좀 더 미려하게 보여주는 CSS 코드라고 보면 된다.





블로그 이미지

Link2Me

,
728x90

ㅇ 배열
   - 배열은 여러 개의 변수를 한곳에 저장할 수 있는 자료형이다.
   - 자바스크립트에서는 문자열과 숫자, 불, 함수, 객체와 정의되지 않은 자료형까지 총 6가지의 자료형이 존재
   - 배열은 이중 객체의 일종으로, 대괄호([])를 이용해서 생성
   - 배열 안에 입력된 값을 배열 요소라고 부른다.
   - alert(array[1]); // 배열 기호 안에 들어간 숫자를 인덱스(Index)라고 부른다.
   - for (var i in array) 은 for (var i = 0; i < array.length; i++) 와 같은 의미


ㅇ 배열 선언 방법

    - 배열 리터럴 : 대괄호([]) 내에 데이터를 나열하여 배열을 선언하고, 데이터를 할당할 수 있다.

       var arr = [데이터1, 데이터2, 데이터3, ...., 데이터 n];

    - 배열 객체 :

       var arr = new Array(); // 배열 개수 미지정 객체배열 생성

       arr[0] = 2; arr[1] = "one"; arr[2] = 5;


       var arr = new Array(3); // 배열 개수 지정

       arr[0] = 2; arr[1] = "one"; arr[2] = 5;


       var arr = new Array(1, 2, 3, 4, 5); // 배열을 선언함과 동시에 데이터를 배열에 할당


    - 다차원 배열 선언 : 자바스크립트는 기본적으로 다차원 배열을 지원하지 않는다.

      배열안에 배열을 넣는 방식으로 사용은 가능하다.

       var arr = new Array();

       var arr[0] = new Array();

       var arr[0][0] = new Array();


ㅇ 배열 객체의 메소드 및 속성

join(연결문자)

 배열에 저장된 모든 원소를 문자열로 변환한 후 연결하여 출력한다.

 var arr = new Array(1, 2, 3, 4, 5);

 arr.join("-");

 결과 : 1-2-3-4-5

 reverse()

 배열 요소의 순서를 반대로 정렬한다.

 var arr = new Array(1, 2, 3, 4, 5);

 arr.reverse();

 결과 : 5,4,3,2,1

 sort()

 배열 객체 데이터를 오름차순으로 정렬한다.

 push()

 배열의 마지막 위치에 데이터를 추가한다.

 var arr = new Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

 arr.push("레몬");

 document.getElementById("demo").innerHTML = arr;

 pop()

 배열의 마지막 위치의 데이터를 삭제한다.

 shift() 배열의 첫번째 위치의 데이터를 삭제한다.
 
var arr = new Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
 document.write(arr.shift()+"<br />");
 document.write(arr+"<br />");
 출력 결과 :
2,3,4,5,6,7,8,9,10
 unshift() 배열의 첫번째 위치에 데이터를 추가한다.
 var arr = new Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
 document.write(arr.unshift("소림사")+"<br />");
 document.write(arr+"<br />");
 출력 결과 :
소림사,1,2,3,4,5,6,7,8,9,10
 length 배열에 저장된 총 데이터의 개수를 반환한다.
 slice

 배열 원소 중 부분적인 범위 내의 원소만 선택하여 배열을 만든다.

 var arr = new Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
 var slice = arr.slice(3,7); // 인덱스는 0부터 시작하므로 4번째 인덱스부터
 // slice(start, end); 배열의 start index부터 end 바로 전의 index까지를 선택
 document.write(slice);

 splice

 배열의 지정된 데이터를 삭제하고, 그 구간에 새 데이터를 추가하거나 삭제

 var arr = new Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

 document.write(arr.splice(1,3)); // 두번째 인덱스부터 3개를 삭제

 // 즉 2, 3, 4 를 삭제한다.

 document.write(arr+"<br />"); // 삭제되고 남은 배열 데이터만 출력한다.

 var arr = new Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
 document.write(arr.splice(1,3,"마마무","동방신기","소녀시대"));
 
// 두번째 인덱스부터 3개를 삭제하고,

 // 마마무, 동방신기, 소녀시대를 삭제된 곳에 추가한다.
 document.write(arr+"<br />");

 출력 결과 : 1,마마무,동방신기,소녀시대,5,6,7,8,9,10

 filter 배열의 데이터 중에 조건이 참인 데이터만 반환하여 새로운 배열을 생성한다.
 
var arr = new Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
 var fdata = arr.filter(function(val){
     return val >= 5;
 });
 document.write(fdata + "<br />"); 


ㅇ 배열 활용

 최대값 구하기

 배열의 최대값 구하기

 var arr = new Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

 var min = Math.max.apply(null, arr);

 최소값 구하기
 배열의 최소값 구하기
 var arr = new Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
 var min = Math.min.apply(null, arr);

 이차원 배열

<script>
var arr = new Array();

arr[0] = new Array(); //2차배열 선언
arr[1] = new Array();

arr[0][0] = "이순신";
arr[0][1] = "24세";

arr[1][0] = "홍길동";
arr[1][1] = "35세";

for(var i=0; i<arr.length; i++){
    for(var j=0; j<arr[i].length; j++){
        document.write(arr[i][j]+"<br />");
    }
}
</script>



'Web 프로그램 > js, jQuery' 카테고리의 다른 글

jQuery each 메소드와 map 메소드 차이점  (0) 2018.04.29
jQuery map 함수  (0) 2018.04.29
jQuery - input 배열 수 세기  (0) 2018.04.20
jQuery 체크박스 선택 여부 확인  (0) 2018.04.15
Popup Modal with jQuery  (0) 2018.04.12
블로그 이미지

Link2Me

,
728x90

<form name='my_form'>
  <input type='button' id='my_button' value='개수 카운트' />
  <hr>
  <input type='text' name='tag' class='chk0' value='1' />
  <input type='text' name='tag' class='chk0' value='2' />
  <input type='text' name='tag' class='chk0' value='3' />
  <input type='text' name='tag' class='chk0' value='' />
  <input type='text' name='tag' class='chk0' value='' />
</form>

<script src="//code.jquery.com/jquery.min.js"></script>
<script>
$("#my_button").click(function() {
    //alert($("input[class='chk0']").length); // 전체 개수
    var count = 0;
    $('.chk0').filter(function() {
        if(this.value.trim().length > 0){ // 체크한 것의 개수
            count++;
        }
    });
    alert(count);

});
</script>

'Web 프로그램 > js, jQuery' 카테고리의 다른 글

jQuery map 함수  (0) 2018.04.29
Javascript 배열 정리  (0) 2018.04.29
jQuery 체크박스 선택 여부 확인  (0) 2018.04.15
Popup Modal with jQuery  (0) 2018.04.12
jQuery animate  (2) 2018.02.14
블로그 이미지

Link2Me

,
728x90

체크된 체크박스 value 가져오기

전체선택/해제 하는 jQuery 코드와

개별적으로 선택된 값을 가져오고 가져온 개수가 몇개인지 파악하는 코드다.


prop()는 현재 설정된 속성값과 입력폼의 체크등의 여부를 확인 가능한 매우 유용한 속성이다.

결과로 체크 여부에 따라 boolean 타입의 true, false가 반환된다.

$("input:checkbox[id='ID']").prop("checked");

$("input:checkbox[name='NAME']").prop("checked");

$("input:checkbox[name='class[2]']").prop("checked",true); // 배열 사용시 따옴표를 넣어야 인식되더라.

$("input:checkbox[id='class3']").prop("checked",true);


is() 메소드는 해당하는 요소의 상태에 따라 옳고 그름을 불리언으로 반환한다.
$(this).is(":checked");

if($("input:checkbox[id='ID']").is(":checked") == true){ }


<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script>
$(function(){
    $("#check_all").click(function(){
        var chk = $(this).is(":checked");
        if(chk) $(".allchk input").prop('checked', true);
        else  $(".allchk input").prop('checked', false);
    });

    $("#submit").click(function(){
        var selectedCheck = new Array();
        $('.inputchk:checked').each(function() {
            selectedCheck.push(this.value);
        });
        // alert(selectedCheck + '\n개수 : '+selectedCheck.length);
        if(selectedCheck.length < 1 ){
            alert('최소한 1개 이상 항목을 선택하셔야 합니다');
            return false;
        }
        //document.form.submit();
    });

});
</script>
</head>
<body>
<label><input id="check_all" type="checkbox"> <b>전체선택</b></label>
<ul class="allchk">
<label><input class="inputchk" name="class[1]" value="1" type="checkbox">1</label>
<label><input class="inputchk" name="class[2]" value="2" type="checkbox">2</label>
<label><input class="inputchk" name="class[3]" id="class3" value="3" type="checkbox">3</label>
<label><input class="inputchk" name="class[4]" value="4" type="checkbox">4</label>
<label><input class="inputchk" name="class[5]" value="5" type="checkbox">5</label>
</ul>
<button type='submit' class='btn btn-primary' id='submit'>전송</button>
</body>
</html>


http://bytutorial.com/blogs/jquery/jquery-get-selected-checkboxes 를 참조하면 된다.


개수만 체크하는 경우에는 이렇게 하면 더 편하다.

  var selectedCheck = new Array();
  $('.inputchk:checked').each(function() {
       selectedCheck.push(this.value);
  });
  // alert(selectedCheck + '\n개수 : '+selectedCheck.length);
  if(selectedCheck.length < 1 ){
      alert('최소한 1개 이상 항목을 선택하셔야 합니다');
      return false;
   }

전체 갯수 : $("input:checkbox[name='name명']").length;
선택된 갯수 : $("input:checkbox[name='name명']:checked").length;

따라서 위의 것을 간단하게 줄이면 $('.inputchk:checked').length; 가 개수 체크를 하므로

if($('.inputchk:checked').length < 1){

     alert('최소한 1개 이상 항목을 선택하셔야 합니다');

     return false;

}


'Web 프로그램 > js, jQuery' 카테고리의 다른 글

Javascript 배열 정리  (0) 2018.04.29
jQuery - input 배열 수 세기  (0) 2018.04.20
Popup Modal with jQuery  (0) 2018.04.12
jQuery animate  (2) 2018.02.14
jQuery addClass()  (0) 2018.02.04
블로그 이미지

Link2Me

,
728x90

깔끔한 모양의 팝업창처럼 보여주는 기능이다.

자세한 설명은

https://inspirationalpixels.com/tutorials/custom-popup-modal 을 참조하면 된다.



본 예제 코드는 첨부파일 참조

popup_jQuery.zip



=== import_header.php ===

<title><?php echo $title;?></title>
<meta charset="utf-8">
<meta name="robots" content="noindex,nofollow"/>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="css/survey.css" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="js/modal.js"></script>

<!DOCTYPE html>
<html lang="ko">
<head>
<?php $title='Home';include_once 'import_header.php';?>
</head>
<body>
<div class="container">
    <h3 align=center>설문조사</h3>
    <table class="table table-hover">
        <TR>
            <TD align=center>
                <a href="#" data-popup-open="popup-1">Open Popup</a>

                <div class="popup" data-popup="popup-1">
                    <div class="popup-inner">
                    <h3>jQuery 팝업 예시</h3>
                    <p>팝업할 본문 내용</p>
                    <p><a href="#" data-popup-close="popup-1">Close</a></p>
                    <a href="#" class="popup-close" data-popup-close="popup-1">x</a>
                    </div>
                </div>

            </TD>
        </TR>
        <TR>
            <TD align=center>
            Copyright(c) <?php echo date("Y"); ?>,
            <B><a href='http://link2me.tistory.com' target='_blank'>Survey</a></B> All Rights Reserved.</TD>
        </TR>
    </TABLE>
</div>
</body>
</html>

$(function() {
    //----- OPEN
    $('[data-popup-open]').on('click', function(e)  {
        var targeted_popup_class = jQuery(this).attr('data-popup-open');
        $('[data-popup="' + targeted_popup_class + '"]').fadeIn(350);
        e.preventDefault();
    });
    //----- CLOSE
    $('[data-popup-close]').on('click', function(e)  {
        var targeted_popup_class = jQuery(this).attr('data-popup-close');
        $('[data-popup="' + targeted_popup_class + '"]').fadeOut(350);
        e.preventDefault();
    });
});

/* Outer */
.popup {
    width:100%;
    height:100%;
    display:none;
    position:fixed;
    top:0px;
    left:0px;
    background:rgba(0,0,0,0.75);
}

/* Inner */
.popup-inner {
    max-width:700px;
    width:90%;
    padding:40px;
    position:absolute;
    top:50%;
    left:50%;
    -webkit-transform:translate(-50%, -50%);
    transform:translate(-50%, -50%);
    box-shadow:0px 2px 6px rgba(0,0,0,1);
    border-radius:3px;
    background:#fff;
}
/* Close Button */
.popup-close {
    width:30px;
    height:30px;
    padding-top:4px;
    display:inline-block;
    position:absolute;
    top:0px;
    right:0px;
    transition:ease 0.25s all;
    -webkit-transform:translate(50%, -50%);
    transform:translate(50%, -50%);
    border-radius:1000px;
    background:rgba(0,0,0,0.8);
    font-family:Arial, Sans-Serif;
    font-size:20px;
    text-align:center;
    line-height:100%;
    color:#fff;
}
.popup-close:hover {
    -webkit-transform:translate(50%, -50%) rotate(180deg);
    transform:translate(50%, -50%) rotate(180deg);
    background:rgba(0,0,0,1);
    text-decoration:none;
}


'Web 프로그램 > js, jQuery' 카테고리의 다른 글

jQuery - input 배열 수 세기  (0) 2018.04.20
jQuery 체크박스 선택 여부 확인  (0) 2018.04.15
jQuery animate  (2) 2018.02.14
jQuery addClass()  (0) 2018.02.04
jQuery all Checked  (0) 2018.01.23
블로그 이미지

Link2Me

,
728x90

jQuery 의 animate 메소드를 사용하면 element 를 다양하게 이동시키고 이동시키는 모습을 화면에 보여줄 수 있다.

animate( properties, [speed], [easing], [callback] )
- properties : element 가 애니메이션이 끝나고 갖게 될 속성(css properties 값)
- speed : 애니메이션의 진행 시간 ( ms 단위 ) 또는 slow, fast, 1000
- easing : 애니메이션이 어떻게 진행될지를 제어하는 기능을 제공하는 선택사항
- callback : 애니메이션이 종료되었을 때 호출되는 메소드



<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
    function move(){
        $('#moveImg').animate( {left:'150px'}, 1000)
                     .animate( {left:'50px'}, 500, move);
    }
    move();
})
</script>



배경 이미지와 움직이게 할 이미지 2개가 있다.

움직이게 할 이미지를 선택하여 1초후에 left 150px 에 있도록 한다.

다음에 0.5초후에 left 50px 에 있도록 한다.

move 는 callback 메소드로 반복 동작을 시킨다.



<script>
var state=true;
$("#button").click(function(){
    if(state){
        $("#effect").stop().animate({"background-color":"#f90", color:"#fff", width:"420px"}, 1000);
    }else{
        $("#effect").
stop().animate({"background-color":"#f4f4f4", color:"#000", width:"200px"}, 1000);
    }
    state=!state;
});
</script>


jQuery 버전이 높아지면서 토글함수 기능이 없어져서 토글 처리하는 걸 status 값 true, false 를 이용하여 처리하도록 한 예제다.

'Web 프로그램 > js, jQuery' 카테고리의 다른 글

jQuery 체크박스 선택 여부 확인  (0) 2018.04.15
Popup Modal with jQuery  (0) 2018.04.12
jQuery addClass()  (0) 2018.02.04
jQuery all Checked  (0) 2018.01.23
[jQuery] 테이블 다루기 (find)  (0) 2018.01.15
블로그 이미지

Link2Me

,
728x90


The addClass() method adds one or more class names to the selected elements. (addClass 메소드는 하나 이상의 클래스를 추가할 수 있다)
$(selector).addClass(classname,function(index,currentclass))


위 예제를 실행해보면 addClass 이전과 이후의 현재 Class명을 얻어오도록 되어 있어 클래스가 어떻게 추가되었는지 확인할 수 있다.

Firefox 브라우저 또는 Chrome 브라우저에서 F12키를 누르면 console에서 변하는 결과를 확인할 수 있다.

CSS 클래스를 jQuery addClass 로 동적으로 추가하는 방법이라고 보면 된다.


도움되는 참조 사이트

http://jsfiddle.net/vL8DP/

https://stackoverflow.com/questions/13816730/jquery-add-class-and-remove-all-others




'Web 프로그램 > js, jQuery' 카테고리의 다른 글

Popup Modal with jQuery  (0) 2018.04.12
jQuery animate  (2) 2018.02.14
jQuery all Checked  (0) 2018.01.23
[jQuery] 테이블 다루기 (find)  (0) 2018.01.15
JavaScript 와 jQuery 비교 정리  (0) 2018.01.15
블로그 이미지

Link2Me

,
728x90

체크박스(checkbox) 전체를 선택/해제하는 jQuery 예제다.

checkall input 박스 변화를 감지하여

$("#check_item").children("input").attr("checked", true); 하거나

$("#check_item").children("input").attr("checked", false); 한다.


attr() 사용시
- HTML attribute 값이 모두 String 으로 넘어옴

prop() 사용시
- Javascript의 프로퍼티 값이 넘어오기 때문에 boolean, date, function 등도 가져올 수 있음


<input type="checkbox" name="" id="chk" checked="checked">

var $checkbox = $('#chk');
console.log($checkbox.attr('checked')); // checked속성의 값을 표시 → "checked"
console.log($checkbox.prop('checked')); // checked프로파티값을 표시 → true or false

체크가 되어있는지 판단을 할경우 .prop()을 사용할 필요가 있다.


체크박스를 전체 선택하고 해제하는 스크립트를 쓰려면 .prop()로 true/false 를 제어하자.

For jQuery 1.6+ :
.attr() is deprecated for properties; use the new .prop() function instead as

$('#myCheckbox').prop('checked', true); // Checks it
$('#myCheckbox').prop('checked', false); // Unchecks it


For jQuery < 1.6:
To check/uncheck a checkbox, use the attribute checked and alter that.
With jQuery you can do:
$('#myCheckbox').attr('checked', true); // Checks it
$('#myCheckbox').attr('checked', false); // Unchecks it


<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>form ex</title>
<style>
body {
    margin: 20px;
    font-family: "맑은 고딕";
}
input[type=checkbox] {
    border: 1px solid #ccc;
}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
$(function(){
    $("#checkall").change(function(){
        $("input:checkbox").prop('checked', $(this).prop("checked"));
        /*
        if(this.checked){
            $("#check_item").children("input").attr("checked", true); // checked="true"
        }else{
            $("#check_item").children("input").attr("checked", false); // checked="false"
        }
        */
    });
    $("input[name=chkname]").click(function(){ // 개별 선택을 누르면 전체 선택 체크가 풀리게 처리
        if($("#checkall").is(":checked")==true){
            $("input:checkbox[name=checkall]").prop("checked",false);
        }
       console.log($(this).val());
    });

});
</script>
</head>

<body>
<input type="checkbox"  name="checkall" id="checkall" />
<label>All</label>
<div id="check_item">
    <input type="checkbox" name="chkname" value="1" />
    <label>홍길동</label>
    <input type="checkbox" name="chkname" value="2" />
    <label>강감찬</label>
    <input type="checkbox" name="chkname" value="3" />
    <label>이순신</label>
</div>
</body>
</html>

'Web 프로그램 > js, jQuery' 카테고리의 다른 글

jQuery animate  (2) 2018.02.14
jQuery addClass()  (0) 2018.02.04
[jQuery] 테이블 다루기 (find)  (0) 2018.01.15
JavaScript 와 jQuery 비교 정리  (0) 2018.01.15
[Javascript] Form 객체 다루기 (자바스크립트 와 jQuery)  (0) 2017.12.16
블로그 이미지

Link2Me

,
728x90

아래 예제는 생활코딩에서 설명하는 강좌 내용을 적는다.

<html>

<head>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>

</head>

<body>

<ul>

    <li class="marked">html</li>

    <li>css</li>

    <li id="active">JavaScript

        <ul>

            <li>JavaScript Core</li>

            <li class="marked">DOM</li>

            <li class="marked">BOM</li>

        </ul>

    </li>

</ul>

<script>

    //$( ".marked", "#active").css( "background-color", "red" );

    //$("#active .marked").css( "background-color", "red" );

    $("#active").find('.marked').css('background-color','blue');

</script>

</body>    

</html>


$(".marked", "#active").css( "background-color", "red" );

$("#active .marked").css( "background-color", "red" );

$("#active").find('.marked').css('background-color','red');

는 모두 동일한 결과를 출력한다.


find는 jQuery 객체 내에서 어떤 요소(기준요소)의 하위 요소 중 특정 요소를 찾을 때 사용한다.



CSS 테이블에 대한 사항은 http://link2me.tistory.com/1463 를 참조하라.


테이블을 jQuery 로 다루는 걸 적어둔다.

children()은 부모 요소의 바로 아래 단계인 자식요소만 선택할 수 있으나, 
find()는 부모 태그의 모든 하위 요소의 자식을 선택하여 가져올 수 있다.


$.each() 메서드는 object 와 배열 모두에서 사용할 수 있는 일반적인 반복 함수다.

첫번째 매개변수로 배열이나 객체를 받는다.

두번째 매개변수로 콜백함수를 받으며, 콜백함수의 인자로는 인덱스와 값을 인자로 갖는다.

$.each(arr, function (index, item) {
});


$('.list li').each(function (index, item) {
});



$("table tbody tr").click(function(){

     var tr = $(this); // 현재 클릭된 row

     var td = tr.children();

     // 반복문을 사용해서 배열에 값을 담아보기

     var tdArray = new Array(); // 배열선언

     td.each(function(i){

         tdArray.push(td.eq(i).text());

     });

     console.log("배열에 담은 값 : " + tdArray);

     // 특정 셀 값 알아내기

     var customerId = $(this).find("td").eq(2).html();

});


$("table tbody tr td").click(function(){

    var td = $(this); // 현재 클릭된 셀

    var val = td.text(); // 현재 선택된 셀의 값

    var id=$(this).attr("id"); // 셀에 지정된 속성값

});


<!DOCTYPE html>
<head>
<meta charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no"/>
<meta http-equiv="X-UA Compatible" control="IE=edge,chrome=1" />
<link rel="stylesheet" href="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">
<script src="http://code.jquery.com/jquery.min.js"></script>
<script src="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
<script>
$(function(){
    // tr 태그에 마우스를 올릴때
    $('table tbody tr').mouseover(function() {
        $(this).children().css({
            'backgroundColor' : '#DCDCDC',
            'cursor' : 'pointer'
        });
    }).mouseout(function() {
        $(this).children().css({
            'backgroundColor' : '#FFFFFF',
            'cursor' : 'default'
        });
    });

    // 전체 선택, 전체 해제
    $("#checkall").change(function() {
        $("input:checkbox").prop('checked', $(this).prop("checked"));
    });

    $('#select_chkbox').click(function(i) {
        var rowData = new Array();
        var chkData = new Array();
        var checkbox = $('input:checkbox[name="uid[]"]:checked');
        checkbox.each(function(i){ // 반복되는 태그 단위를 찾아서 each() 함수 사용
           var select_value = $(this).val();
           chkData.push(select_value);

           // checkbox.parent() : checkbox의 부모는 <td>
           // checkbox.parent().parent() : <td>의 부모이므로 <tr>
           var tr = checkbox.parent().parent().eq(i);
           var td = tr.children();
           rowData.push(tr.text()+"<br />");
        });
        if (rowData.length == 0) {
           $("#chk_result").html("선택항 항목이 없습니다").css("color", "blue");

           $("#rawData_result").html("");

        } else {
           $("#chk_result").html("선택된 체크박스 값 : "+chkData).css("color", "blue");
           $("#rawData_result").html("체크된 Row의 모든 데이터 : <br /> "+rowData);
        }
    });

    var sum = 0;
    $('table tbody tr').each(function(){ //테이블 모든 tr에 순차 접근
       if($.isNumeric($("td:eq(4)",this).text())){ //해당 tr의 다섯번째 td에 접근해서 숫자인지 확인
           sum += parseInt($("td:eq(4)",this).text());//해당하는 값을 숫자로 변환해서 누적합산 처리
       }
    });
    $("#sum").text("수량 합계 : "+sum.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","));// sum을 출력

});
</script>
</head>
<body>
<div class="container">
    <div class="row">
        <table class="table table-hover">
        <thead>
        <tr>
        <th class="header" width="30"><input type="checkbox" id="checkall" /></th>
        <th class="header" width="100">No</th>
        <th class="header" width="250">품목</th>
        <th class="header" width="250">가격</th>
        <th class="header" width="200">수량</th>
        </tr>
        </thead>
        <tbody>
        <tr>
            <td><input type="checkbox" class="chkbox" name="uid[]" value="7" /></td>
            <td>7</td>
            <td>사과</td>
            <td>5</td>
            <td>5</td>
        </tr>
        <tr>
            <td><input type="checkbox" class="chkbox" name="uid[]" value="6" /></td>
            <td>6</td>
            <td>수박</td>
            <td>4</td>
            <td>500</td>
        </tr>
        <tr>
            <td><input type="checkbox" class="chkbox" name="uid[]" value="5" /></td>
            <td>5</td>
            <td>사과</td>
            <td>3</td>
            <td>3</td>
        </tr>
        <tr>
            <td><input type="checkbox" class="chkbox" name="uid[]" value="4" /></td>
            <td>4</td>
            <td>수박</td>
            <td>2</td>
            <td>500</td>
        </tr>
        <tr>
            <td>
            <input type="checkbox" class="chkbox" name="uid[]" value="3" />
            </td>
            <td>3</td>
            <td>복숭아</td>
            <td>7</td>
            <td>50</td>
        </tr>
        <tr>
            <td>
            <input type="checkbox" class="chkbox" name="uid[]" value="2" />
            </td>
            <td>2</td>
            <td>사과</td>
            <td>8</td>
            <td>90</td>
        </tr>
        <tr>
            <td>
            <input type="checkbox" class="chkbox" name="uid[]" value="1" />
            </td>
            <td>1</td>
            <td>망고</td>
            <td>555</td>
            <td>40</td>
        </tr>
        </tbody>
        <td colspan="5" style="text-align:left;">
        <button type="button" class="btn btn-success btn-sm" id="select_chkbox">선택</button>
        </table>
    </div>
    <div id="chk_result"></div>
    <div id="rawData_result"></div>
    <div id="sum"></div>
</div>

</body>
</html>
 


'Web 프로그램 > js, jQuery' 카테고리의 다른 글

jQuery addClass()  (0) 2018.02.04
jQuery all Checked  (0) 2018.01.23
JavaScript 와 jQuery 비교 정리  (0) 2018.01.15
[Javascript] Form 객체 다루기 (자바스크립트 와 jQuery)  (0) 2017.12.16
[jQuery] Table Filtering  (0) 2017.12.13
블로그 이미지

Link2Me

,
728x90

jQuery 로 간단하게 하는 것이 Javascript 코드와 비교표를 통해서 정리하며, 계속 추가할 것이다.


jQuery

JavaScript

$(document).ready(function() {

});

또는

$(function () {
});

 window.onload=function(){

}

 $("p").css("background-color", "#f60");

 var p=document.getElementsByTagName("p");

 p.style.backgroundColor="#f60";

 $("#navi").css("background-color", "#f60");

 var navi=document.getElementById("navi");

 navi.style.backgroundColor="#f60";


 $("#element1").on('click', function() {
        // do something on click
 }

 또는  
$("#element1").click(function() {
        // do something on click
 });

 var x = document.getElementById("element1");
if (x.addEventListener) { // IE 9 이상, 타브라우저
    x.addEventListener("click", myFunction);
} else if (x.attachEvent) { // For IE 8 and earlier versions
    x.attachEvent("onclick", myFunction);
}

 document.getElementById("element1")

.addEventListener('click',doSomething,false);

$('#outer').on('mouseup', function (event) {
    alert('This alert should not show up!');
}, false);

document.getElementById('outer').addEventListener('mouseup', function (event) {
    alert('This alert should not show up!');
}, false);

 $(".class1.class2").eq(0).text(1254);

 document.querySelectorAll('.class1.class2')[0].textContent = 1254;

 document.querySelectorAll('.class1.class2')[0].innerHTML = 1254;


jQuery 개발시 주의사항

jQuery CDN에 있는 jquery-latest.js 라는 최신 버전을 사용하는 것에 주의해야 한다.

개발할 당시에 사용했던 버전에 최적화되어 있을 수 있으니 반드시 최신버전이 좋은 것은 아니다.

Javascript 를 모르고 jQuery 만 배우면 한계에 부딪치므로 기초부터 튼튼히 배우는 게 좋은데 체계적으로 배우지 않아서 그런지 쉽지 않다.

jQuery 라이브러리만 사용하지 말고 어떻게 코딩하면 고객에게 더 좋은 Web  페이지를 제공해 줄 수 있는지 어떻게 하면 더 깔끔하게 개발할 수 있는지 고민을 하는 것이 바로 고급 Web 개발자로 들어서는 길이란다.


블로그 이미지

Link2Me

,
728x90

HTML Form 은 client의 정보를 입력받는 문서라고 보면 된다.

<form> 태그를 이용하여 각종 입력양식을 통해 입력받아 서버로 전달하는 기능을 담당한다.

form객체는 document.forms 배열로 표현한다.


파일을 직접 실행해볼 수 있게 만든 예제 파일

formChk.php

form_javascript.php

form_jquery.php


jQuery 를 사용한 함수는 없지만 jQuery 스크립트를 한줄 추가했다.

첨부한 예제 파일을 다운로드 받아서 실행해보면 금방 이해된다.

forms[0] 는 한 파일안에 form 태그가 2개 존재할 경우 첫번째 form 을 의미한다.

두번째 form 은 forms[1]


var name = document.myform.name.value;
var telNO = document.myform.telNO.value;
var address = document.myform.address.value;

에서 공통적인 변수를 별도로 지정하여 처리하는 편이 더 좋다.

var f = document.myform;


<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
function info_form(){
   str  = " name   : " + document.myform.name + "<br>" ;
   str += " action : " + document.myform.action+ "<br>" ;
   str += " target : " + document.myform.target + "<br>" ;
   str += " method : " + document.myform.method + "<br>" ;
   str += " encoding  : " + document.myform.encoding + "<br>" ;
   str += " length  : " + document.myform.length + "<br>" ;
   str += " 첫번째 요소 value  : " + document.myform.elements[0].value + "<br>" ;
   str += " 첫번째 요소 name  : " + document.myform.elements[0].name + "<br>" ;
   str += " 첫번째 form의 첫번째 요소 name  : " + document.forms[0].elements[0].name + "<br>" ;
   str += " 첫번째 form의 첫번째 요소 value  : " + document.forms[0].elements[0].value + "<br>" ;
   str += " 첫번째 form의 두번째 요소 name  : " + document.forms[0].elements[1].name + "<br>" ;
   str += " 첫번째 form의 두번째 요소 value  : " + document.forms[0].elements[1].value + "<br>" ;
   str += " 첫번째 form의 세번째 요소 name  : " + document.forms[0].elements[2].name + "<br>" ;
   str += " 첫번째 form의 세번째 요소 value  : " + document.forms[0].elements[2].value + "<br>" ;
   document.write(str);

}

function validateForm(){
    var name = document.myform.name.value;
    var telNO = document.myform.telNO.value;
    var address = document.myform.address.value;
    if(name ==""){
        alert('이름을 입력하세요');
        document.myform.name.focus();
        return false;
    }
    if(telNO ==""){
        alert('전화번호를 입력하세요');
        document.myform.telNO.focus();
        return false;
    }
    if(address ==""){
        alert('주소를 입력하세요');
        document.myform.address.focus();
        return false;
    }
}
</SCRIPT>
</head>
<body>
<form name="myform" action="formChk.php" method="post" onsubmit="return validateForm()">
    이름:<input type="text" name="name" id="myname" value="홍길동" size="20" />
    전화:<input type="text" name="telNO" value="010-1234-9999" size="20" />
    주소:<input type="text" name="address" value="" size="50" required />
    <input type="button" value="폼정보보기" onclick="info_form()" />
    <input type="submit" value="확인" />
    <input type="reset" value="취소" />
</form>
<p id="demo"></p>
</body>
</html>

 === formChk.php ===

<?php
extract($_POST);
print_r($_POST);
echo '<br />';
var_dump($_POST);
exit; // 이 명령어 다음에 적힌 코드는 실행하지 말고 빠져나가라.
?>


위 코드를 jQuery 로 변경한 것을 살펴보자.

$("[attribute]")  : [attribute(속성)] selector는 각 selector의 특정 속성을 선택한다.

- [attribute=value] : 특정 속성과 값을 가진 각 element를 선택한다.

- $(selector).attr(attribute) : attribute의 값을 Return

- $(selector).attr(attribute,value) : attribute의 값을 설정

- $(selector).attr(attribute,function(index,currentvalue)) : function을 사용하여 값을 설정


<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>

function info_form(){
   str  = " name   : " + $("form").attr('name') + "<br>" ;
   str += " action : " + $("form").attr('action') + "<br>" ;
   str += " target : " + $("form").attr('target') + "<br>" ;
   str += " method : " + $("form").attr('method') + "<br>" ;
   str += " encoding  : " + $("form").attr('encoding') + "<br>" ;
   str += " length  : " + $("form").val().length + "<br>" ;
   str += " 첫번째 요소 value  : " + $("form input[name=name]").val() + "<br>" ;
   str += " 첫번째 요소 name  : " + $("form input[name=name]") + "<br>" ;
   str += " 첫번째 form의 첫번째 요소 name  : " + document.forms[0].elements[0].name + "<br>" ;
   str += " 첫번째 form의 첫번째 요소 value  : " + document.forms[0].elements[0].value + "<br>" ;
   str += " 첫번째 form의 두번째 요소 name  : " + $("form input[name=telNO]") + "<br>" ;
   str += " 첫번째 form의 두번째 요소 value  : " + $("form input[name=telNO]").val() + "<br>" ;
   str += " 첫번째 form의 세번째 요소 name  : " + $("form input[name=address]") + "<br>" ;
   str += " 첫번째 form의 세번째 요소 value  : " + $("form input[name=address]").val() + "<br>" ;
   document.write(str);

}


$(document).ready(function(){
    $("#info_form").click(function(){
        info_form();

        // $("form :input").each(function(){
           // alert($(this).val());
        // });

    });
    
    $("form").submit(function(){
        var name = $("input[name=name]").val();
        var telNO = $("input[name=telNO]").val();
        var address = $("input[name=address]").val();
        if(name ==""){
            alert('이름을 입력하세요');
            $("input[name=name]").focus();
            return false;
        }
        if(telNO ==""){
            alert('전화번호를 입력하세요');
            $("input[name=telNO]").focus();
            return false;
        }
        if(address==""){
            alert('주소를 입력하세요');
            $("input[name=address]").focus();
            return false;
        }
    });
});
</script>
</head>
<body>
<form name="myform" action="formChk.php" method="post">
    이름:<input type="text" name="name" id="myname" value="홍길동" size="20" />
    전화:<input type="text" name="telNO" value="010-1234-9999" size="20" />
    주소:<input type="text" name="address" value="" size="50" />
    <input type="button" id="info_form" value="폼정보보기" />
    <input type="submit" value="확인" />
    <input type="reset" value="취소" />
</form>
<p id="demo"></p>
</body>
</html>


<button id="button1">button1</button>
<button id="button2">button2</button>
<button id="button3">button3</button>
<button id="button4">button4</button>

<div></div>

<script>
$(function(){
    $("button").each(function(){
        $(this).click(function(){
            var name_var=$(this).attr("id");
            $("div").text("jQuery Object : "+name_var);
        });
    });
})
</script>


참조 : 제대로 배우는 자바스크립트 Form 전송 기초 https://link2me.tistory.com/954

블로그 이미지

Link2Me

,
728x90

화면에 출력되는 Table 데이터를 Filtering 하여 보여주는 jQuery 코드 예제다.

화면에 이미 출력된 데이터 중에서 Filtering 한다고 보면 된다.


테스트에 사용한 코드는

jQuery_TableFiltering-01.php


테이블 필터링 예제는 https://www.jqueryscript.net/demo/jQuery-Plugin-To-Filter-Rows-Of-An-Html-Table-Table-Filtering/ 등 검색하면 많이 나온다.



위와 같은 테이블에서 검색어를 입력하면 해당 검색어를 포함하는 리스트만 출력하는 jQuery 에 대해 정리해둔다.


 $(document).ready(function() {
    $("#mykeyword").on("keyup", function() {
        var value = $(this).val().toLowerCase();
        $("#myTable_tbody tr").filter(function() {
            $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
        });
    });
});


위 jQuery 코드는 테이블내에 일치하는 모든 결과를 출력한다. (번호열 검색 제외)

단, 한글을 검색하는 경우에는 즉각적으로 표시되지 않으므로 입력한 엔터키를 한번 눌러야 한다.

- keyup 이벤트는 키보드의 키를 눌렀다 뗄 때 요소에 이벤트를 발생시킨다.

- $("#mykeyword").on("keyup", function() {} 또는 $("#mykeyword").keyup(function() {} 으로 해도 된다.

- toLowerCase() : 문자열에서 영문 대문자를 모두 소문자로 바꾼다.

- indexOf("찾을 문자") : 문자열에서 왼쪽부터 찾을 문자와 일치하는 문자를 찾아 최초로 일치하는 문자의 인덱스 번호를 반환한다. 만일 찾는 문자가 없다면 -1 을 반환한다.


 $(document).ready(function() {
    $("#mykeyword").on("keyup", function() {
        var value = $(this).val().toLowerCase();
        $("#myTable > tbody > tr").hide();
        var temp = $("#myTable > tbody > tr > td:nth-child(5n+4):contains('" + value + "')");
        $(temp).parent().show();
    });
});


Using a formula (an + b) : a 는 테이블의 칼럼 갯수라고 보면 된다. b 는 1부터 시작한다.

td:nth-child(5n+4) : 칼럼 갯수가 5개인 테이블에서 4번째 즉 학과에 대한 검색결과를 출력한다.

5n + 1 로 변경하고 검색(Filtering)하면 번호열 검색결과를 반환한다.


CSS 에

#myTable > tbody > tr td:nth-child(5n-1) {
    align: right;
    text-align: right;
}

를 추가해보면 테이블 정렬이 어떻게 되는지 확인할 수 있다.

-1 은 오른쪽부터 0, -1, -2 라고 보면 된다.

5n 대신에 2n, 3n, 4n 등으로 숫자를 변경해보면 어떻게 변하는지 확인할 수 있다.


첨부파일 코드 내용

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
    $("#mykeyword").keyup(function() {
        var value = $(this).val().toLowerCase();
        $("#myTable_tbody tr").filter(function() {
            $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
        });
        // $("#myTable > tbody > tr").hide();
        // var temp = $("#myTable > tbody > tr > td:nth-child(5n+4):contains('" + value + "')");
        // $(temp).parent().show();
    });
});
</script>
<style>
#container {width: 900px; margin: 0 auto;}
#myTable {
    font-family: arial, sans-serif;
    border-collapse: collapse;
    width: 100%;
    border: 1px solid #ddd;
}

#myTable td, th {
    border: 1px solid #dddddd;
    text-align: center;
    padding: 8px;
}

#myTable tr {border-bottom: 1px solid #ddd;}

#myTable tr:nth-child(even) {
    background-color: #f1f1f1;
}

#myTable > tbody > tr td:nth-child(5n) {
    align: right;
    text-align: right;
}

#myTable > thead > tr { background-color: #ddee33; color:#000fff; }
#myTable > tbody > tr:hover { background-color: #d1f1f1; }
</style>
</head>
<body>
<div id="container">
    <h2>Filterable Table</h2>
    <input type="text" id="mykeyword" placeholder="검색어를 입력하세요">
    <br>
    <br>
    <table id='myTable'>
        <thead>
            <tr>
                <th>번호</th>
                <th>이름</th>
                <th>생년월일</th>
                <th>학과</th>
                <th>학번</th>
            </tr>
        </thead>
    
        <tbody id="myTable_tbody">
            <tr>
                <td>1</td>
                <td>박진희</td>
                <td>1991.09.07</td>
                <td>경영정보학과</td>
                <td>2014290031</td>
            </tr>
            <tr>
                <td>2</td>
                <td>김보연</td>
                <td>1991.07.07</td>
                <td>경영학과</td>
                <td>2016290032</td>
            </tr>
            <tr>
                <td>3</td>
                <td>하석진</td>
                <td>1991.05.15</td>
                <td>사회학과</td>
                <td>2017290033</td>
            </tr>
            <tr>
                <td>4</td>
                <td>유희열</td>
                <td>1991.08.07</td>
                <td>건축학과</td>
                <td>2011290038</td>
            </tr>
            <tr>
                <td>5</td>
                <td>송승헌</td>
                <td>1989.04.07</td>
                <td>물리학과</td>
                <td>2011290039</td>
            </tr>
            <tr>
                <td>6</td>
                <td>김태희</td>
                <td>1988.02.07</td>
                <td>의류학과</td>
                <td>2010290040</td>
            </tr>
            <tr>
                <td>7</td>
                <td>정지훈</td>
                <td>1988.07.25</td>
                <td>식품학과</td>
                <td>2012290042</td>
            </tr>
            <tr>
                <td>8</td>
                <td>박진영</td>
                <td>1981.02.07</td>
                <td>영어영문학과</td>
                <td>2015290031</td>
            </tr>
            <tr>
                <td>9</td>
                <td>양현석</td>
                <td>1993.09.07</td>
                <td>역사학과</td>
                <td>2017290055</td>
            </tr>
            <tr>
                <td>10</td>
                <td>유재석</td>
                <td>1995.09.07</td>
                <td>경영정보학과</td>
                <td>2013290056</td>
            </tr>
            <tr>
                <td>11</td>
                <td>고아라</td>
                <td>1993.09.07</td>
                <td>역사학과</td>
                <td>2017290060</td>
            </tr>
        </tbody>
    </table>
    <p>테이블 헤더 검색을 방지하기 위해 tbody 내에서 검색 시작</p>
</div>
</body>
</html>


블로그 이미지

Link2Me

,
728x90

선택된 메뉴가 몇번째인지 찾아내는 jQuery


$('.nav-tabs a').click(function(){
    var idx = $('.nav-tabs a').index(this);
    alert(idx);
    $(this).tab('show');
});


또는

$('.nav-tabs li>a').click(function(){
    var idx = $('.nav-tabs li>a').index(this);
    if(idx == 2){
        alert(idx + '번째 index를 선택했습니다');
    } else {
        alert(idx);
    }
    $(this).tab('show');
});



<ul class="nav nav-tabs">
    <li class="active"><a data-toggle="tab" href="#menu0">메뉴0</a></li>
    <li><a data-toggle="tab" href="#menu1">메뉴1</a></li>
    <li><a data-toggle="tab" href="#menu2">메뉴2</a></li>
    <li><a data-toggle="tab" href="#menu3">메뉴3</a></li>
</ul>

<div class="tab-content">
    <div id="menu0" class="tab-pane fade in active">
      <h4>Menu 0</h4>
      <p>Eaque ipsa quae ab illo inventore veritatis. </p>
    </div>
    <div id="menu1" class="tab-pane fade">
      <h4>Menu 1</h4>
      <p>Eaque ipsa quae ab illo inventore veritatis. </p>
    </div>
    <div id="menu2" class="tab-pane fade">
      <h4>Menu 2</h4>
      <p>Eaque ipsa quae ab illo inventore veritatis. </p>
    </div>
    <div id="menu3" class="tab-pane fade">
      <h4>Menu 3</h4>
      <p>Eaque ipsa quae ab illo inventore veritatis. </p>
    </div>
</div> 


블로그 이미지

Link2Me

,
728x90

ajax(asynchronous Javascript and XML) 회원가입 처리를 하면서 에러가 발생하면 디버깅을 해야 한다.

ajax를 이용해서 클라이언트와 서버가 사용자에게 영향을 미치지 않고 백그라운드에서 정보를 주고 받을 수 있다.

입력변수로 넘어가는 부분에서 에러가 발생하는지 여부는 alert 창으로 확인하면 된다.


echo '{"result":"0"}'; // echo json_encode(array('result' => '0')); 과 동일

echo json_encode(array('result' => '1')); // 회원 등록 성공

echo json_encode(array('result' => '-1')); // 회원 등록 실패

echo json_encode(array('result' => '-2')); // 입력받은 데이터에 문제가 있는 경우


처리된 결과를 return 받은 곳에서 에러가 발생하는지 파악할 때

dataType 이 json 으로 되어 있으면 alert(response); 를 해도 Object.object 라서 에러 메시지가 무엇인지 내용을 알 수 없다.

이럴 경우에는 dataType 을 text 로 변경한 다음에 alert(response); 를 해보면 경고메시지 등이 반환된 것을 알 수 있다.

경고메시지 발생부분을 모두 수정하고 나서, 다시 dataType 을 json 으로 변경하고, alert(response); 를 주석처리해주면 된다.

간단한 것인데도 이 부분에서 자꾸 순간적인 실수를 해서 그냥 적어둔다.


문제가 발생하는 부분은

1. 넘겨주는 url 경로변수가 잘못된 경우

2. dataType 을 json 으로 했는데 respone == 1 이라고 잘못 처리하는 경우

   response.result == 1로 처리해야 한다.

   만약 넘겨주는 값이 {"status":"true","result":"0"} 라고 한다면

   respone.status == true

   response.result == 0

   와 같이 if 조건문을 설정해야 한다.

3. 넘겨주는 data 값이 잘못되었는지 여부도 2번에서 text 로 받아서 메시지를 확인하면 된다.

    http://link2me.tistory.com/1130 참조

4. 파일 인코딩 모드가 UTF-8 인지 확인한다.


var loginpath =$("#ajaxPath").attr('data-path');

PHP 변수를 ajax에서 인식 못해서 아래와 같이 html 코드를 추가해서 경로변수를 자동인식하도록 처리했다.

<div id="ajaxPath" data-path="<?php echo $g['path_page'].'process/'; ?>" ></div>


$('#join-submit').click(function(e){
    e.preventDefault();
    // 입력값 체크는 생략

    var loginpath =$("#ajaxPath").attr('data-path');
    $.ajax({
        url: loginpath+'registerChk.php',
        type: 'POST',
        data: {
            userNM:$("#inputName").val(),
            userID:$('#inputEmail').val(),
            password:$('#inputPassword').val(),
            mobileNO:$("#inputMobile").val()
        },
        dataType: "json", // json, text
        success: function (response) {
            //alert(response);
            if(response.result == 1){
                alert('가입 완료');
                location.replace('index.php'); // 화면 갱신
            } else if(response.result == 0){
                alert('이미 가입된 아이디입니다');
            } else if(response.result == -2){
                alert('입력 데이터를 확인하세요');
            } else {
                alert('등록중에 에러가 발생했습니다');
            }
        },
        error: function(jqXHR, textStatus, errorThrown){
            alert("arjax error : " + textStatus + "\n" + errorThrown);
        }
    });       
   
});



ajax 대신에 post 를 사용할 경우에는 text 데이터만 처리가 되더라.

체크박스로 체크한 데이터만 추가하는 것이다.

// 전체 선택, 전체 해제
$("#checkall").change(function() {
    $("input:checkbox").prop('checked', $(this).prop("checked"));
});

$('#Favorite').click(function() {
    var chkdata = new Array();
    $('input:checkbox[name="uid[]"]:checked').each(function() {
        chkdata.push($(this).val()); // 체크한 아이템 배열로 저장
    });
    if (chkdata.length == 0) {// 배열의 길이가 0 이 아니면
        alert('체크한 항목이 없습니다.');
    }

    $.post(datapath+"favoriteChk.php", {
        userID:$("input[name=userID]").val(), chkdata:chkdata
    }, function(msg) {
        if(msg == 1){
            alert('관심 항목을 추가했습니다.');
            $("input:checkbox").prop('checked', false);
        } else if(msg == 0) {
            alert('수정할 데이터가 없습니다.');
            $("input:checkbox").prop('checked', false);
        } else {
            alert('데이터를 확인하세요\n'+msg);
        }
    });
});

<?php
if(!isset($_SESSION)){
    session_start();
}
//echo '<pre>';print_r($_POST);echo '</pre>';

if(isset($_POST) && $_SERVER['REQUEST_METHOD'] == "POST"){
    @extract($_POST);
    require_once 'path.php';// root 폴더를 기준으로 상대적인 경로 자동 구하기
    require_once $g['path_config'].'dbconnect.php';
    require_once $g['path_class'].'adminClass.php';
    $a = new adminClass();

    if(isset($chkdata)){
        $rs = $a->putFavoriteData($userID,$chkdata);
        echo $rs;
    }
} else {
    echo -1;
}
?>



블로그 이미지

Link2Me

,
728x90

네이버지식인에 자바스크립트 값을 PHP로 넘기는 것에 대해 올라와서 의구심이 들었다.

이런 건 해본적이 없는거 같기도 하고 요즈음 안드로이드 배운다고 jQuery 배우다 중단해서 많이 잊어버려 기억도 안나고 해서 테스트를 해봤다.


<?php
include_once 'dbconnect.php'; // db접속
$width = '<script> document.write(window.screen.width); </script>';
echo 'width : '.$width.'<br />'; // 화면으로 보이는 건 숫자로 보인다. 소스보기로 하면 숫자가 아니다.
echo gettype ($width) . "<br />"; // 타입검사를 하면 string 으로 나온다.
$price = intval($width);  // 정수형으로 변환을 하면 숫자로 나올까??

$sql = "SELECT * FROM table_items WHERE Price > {$price} ";
echo $sql.'<br />';
$result=mysqli_query($dbconn,$sql);
while($row=mysqli_fetch_row($result)){
    echo $row[1].' '.$row[2];
    echo '<br />';
}

?>


$width ="1440";
echo intval($width);
와 같이 직접 입력한 String은 정수형으로 형변환(casting)을 잘 한다.


하지만 자바스크립트에서 받은 값을 직접 DB에 넣어봤더니 숫자로 인식하지 못한다.

육안으로 보이는 <script> document.write(window.screen.width); </script> 는 실제 숫자가 아니라 형변환(intval(string))을 하면 0을 반환한다.


좀 더 명확하게 하기 위해서

include_once 'dbconnect.php'; // db접속
$width = '<script> document.write(window.screen.width); </script>';
echo 'width : '.$width.'<br />';
echo gettype ($width) . "<br />"; //Returns string
$price = intval($width);

$sql = "SELECT * FROM table_items WHERE Price > {$width} ";
echo $sql.'<br />';
$sql = "SELECT * FROM table_items WHERE Price > {$price} ";
echo $sql.'<br />';
이렇게 출력을 해봤다.

화면상으로는

SELECT * FROM table_items WHERE Price > 1920
SELECT * FROM table_items WHERE Price > 0

이렇게 보인다.


브라우저 소스보기로 보면

SELECT * FROM table_items WHERE Price > <script> document.write(window.screen.width); </script>
SELECT * FROM table_items WHERE Price > 0
로 보인다.


https://stackoverflow.com/questions/9715231/unable-to-convert-string-to-integer-in-php

에 PHP 와 JavaScript 언어의 차이점을 간략하게 설명하면서 잘못하고 있다는 걸 답변달아주고 있다.


서버 코드와 Client 코드를 혼용하는 것은 로직이 잘못된 거다.


예전에 "자바스크립트와 PHP 값 전달 이해" 라고 정리해둔 http://link2me.tistory.com/1124 를 보면 조금 도움될 수 있다.

아직 자바스크립트에 대해 완벽하게 이해를 한 것이 아니라서 기회가 될 때마다 수정보강할 예정이다.

블로그 이미지

Link2Me

,