728x90

select 박스를 선택한 값을 jQuery 로 해서 Ajax 로 전송한 결과값을 다시 받은 코드를 구현해봤다.

이 코드를 보면 Ajax 로 값을 어떻게 전달하고, 결과를 다시 어떻게 받은지 알 수 있다.

ajaxPHP.php 파일에서 ehco 의 결과값을 받는다는 걸 알면 응용하는 것은 쉽다.

form 으로 넘기지 않아도 데이터를 전달하고 결과를 받을 수 있다는 걸 알 수 있다.


=== selected html ===

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
$(document).ready(function(){ // html 문서를 다 읽어들인 후
    $('#selectID').on('change', function(){
        if(this.value !== ""){
            var optVal = $(this).find(":selected").val();
            //alert(optVal);
            $.post('ajaxPHP.php',{optVal:optVal}, function(data) {
                alert(data);  // data는 ajaxPHP.php 파일에서 ehco 문의 결과 값             
            });

        }
    });
});
</script>
<body>
<label>select option: </label>
<select id="selectID">
    <option value="">구분</option>
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
    <option value="3">Option 3</option>
    <option value="4">Option 4</option>
</select>
</body>
</html>


=== ajaxPHP.php ===

<?php
$ajax = $_REQUEST['optVal'];
if($ajax == 1) {
    echo '첫번째';
} else if($ajax == 2) {
    echo '두번째';
} else if($ajax == 3) {
    echo '세번째';
} else if($ajax == 4) {
    echo '네번째';
}
?>


테스트 해보고 싶으신 분은 코드를 복사해서 테스트 해보세요. 100% 동작되는 코드입니다.


블로그 이미지

Link2Me

,
728x90

select 박스에서 선택한 값을 읽어오는 jQuery 코드 예제다.

selected 된 값을 표현하는 방법은 아래 3가지 모두 가능하다.

this.value;
$("#selectID option:selected").val();

$(this).find(":selected").val();


라디오버튼에서 선택할 경우

$(this).find(":checked").val();


=== 샘플 ===

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
$(document).ready(function(){ // html 문서를 다 읽어들인 후
    $('#selectID').on('change', function(){
        if(this.value !== ""){
            //var optVal = $("#selectID option:selected").val();
            var optVal = $(this).find(":selected").val();
            alert(optVal);
        }
    });
});
</script>
<body>
<label>select option: </label>
<select id="selectID">
    <option value="">구분</option>
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
    <option value="3">Option 3</option>
    <option value="4">Option 4</option>
</select>
</body>
</html>

블로그 이미지

Link2Me

,
728x90

HTML, javaScript, jQuery 는 Client에서 해석하는 언어이고, PHP는 서버와의 통신을 위한 스크립트 언어다.

서버상에서 가져온 파일을 읽으려면 클라이언트에서 인식할 수 있도록 해줘야 한다.

아니면 PHP 코드를 HTML 파일보다 먼저 읽어들이도록 위치를 위에다 놓은 것도 방법이다.


눈에 보이지 않게 <div id="div1" data-lat="<?php echo $lat;?>"></div> 를 이용해서 PHP 변수를 기록하면, HTML 에 기록된 내용을 jQuery, javaScript 에서 읽어올 수 있다.


PHP 변수를 받는 방법은 다른 파일에서 넘겨준 걸 읽을 때는 $_GET, $_POST 배열로 받아서 처리하면 된다.

아니면 직접 include_once '읽고자하는 파일'; 을 지정해주고 파일을 include 하면 해당 파일의 변수가 인식된다.


속성값 읽어오기

자바스크립트에서는 document.getElementById('div1').getAttribute('data-lat');

jQuery 에서는 $("#div1").attr('data-lat');


속성값 변경하기

자바스크립트에서는 document.getElementById('div1').setAttribute('data-lat','변경할값');

jQuery 에서는 $("#div1").attr('data-lat','변경할값');


DB에서 테이블 형태로 읽어온 걸 화면에 표시하고 테이블내 한 행의 게시글의 특정 정보를 알아내고자 할 때에는 this 를 사용한다.

group=$(this).attr('data-group');


==== 예제 파일 =====

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script>
$(document).ready(function(){ // html 문서를 다 읽어들인 후
    //var lat = $("#div1").attr('data-lat'); // jQuery 방식
    var lat = document.getElementById('div1').getAttribute('data-lat'); // javaScript 방식
    var lon = $("#div2").attr('data-lon');
    alert("lat:"+ lat +" lon:"+ lon);
});
</script>
<body>
<?php
//include_once 'getPHP.php'; 다른 파일 내용을 읽어오고자 할 때
$lat = 33.4505296;
$lon = 126.570667;
?>
<div id="div1" data-lat="<?php echo $lat;?>"></div>
<div id="div2" data-lon="<?php echo $lon;?>"></div>
</body>
</html>

블로그 이미지

Link2Me

,
728x90

<th>
<select id="searchName" name="searchName">
    <option value=''>구분</option>
    <option value="userNM">성명</option>
    <option value="userID">아이디</option>
</select>
<input type="text" id="searchValue" name="searchValue">
<span class="spanBtn" id="SearchBtn">검 색</span>           
</th>


위와 같은 option 값을 변경하는 jQuery

// 지정된 index 값으로 select 하기

$('#searchName option:eq(2)').prop('selected', true); // option 3번째 선택

또는 value값을 직접 적어주는 방법도 가능하다.

$('#searchName option[value=userID]').prop('selected', 'selected').change();


$('#searchValue').val(ID); // searchValue 값을 ID로 자동 입력


// 초기화 처리

$('#searchName option:eq(0)').attr('selected','selected');
$('#searchValue').val('');


// 선택된 값 읽기

$("select[name=searchName]").val();

$("#searchName option:selected").val();


// 선택된 내용(text) 읽어오기

$("#searchName option:selected").text(); // 선택된 text 읽어오기

$("select[name=searchName]").text(); // 이건 원하는 결과가 나오지 않더라.



var ID=$(this).children('.gc').eq(6).text(); // 테이블에서 선택 행의 td 태그의 값을 가져오라

<td class="gc">행복</td>


// 선택된 위치 index

var index = $("#searchName option").index($("#searchName option:selected"));


블로그 이미지

Link2Me

,
728x90

jQuery dialog (jQuery 팝업)창을 띄우는 코드를 사용하려면 https://jqueryui.com/dialog/ 사이트를 참조하면 된다.


$("#id").dialog() - 해당 id로 지정된 영역의 내용을 다이얼로그로 생성
$("#id").dialog("open")  - 다이얼로그 오픈
$("#id").dialog("close") - 다이얼로그를 화면상에서 보이지 않게함
$("#id").dialog("isOpen") - 해당 id를 가진 다이얼로그가 열려진 상태인 경우 true값
$("#id").dialog("moveToTop") - 다이얼로그를 최상위로 배치


- autoOpen : 페이지 로드시 자동으로 다이얼로그 열리는 것을 막고자 할 때 사용 ex) autoOpen:false

- modal : 페이지의 다른 내용위에 최상위로 표시되면서 다른 영역은 선택할수 없도록 할 때 사용 ex) modal:true

- width, height : 다이얼로그 창의 너비, 높이를 설정



아래 파일 구조는 http://link2me.tistory.com/1098 게시글과 같이 보면 이해가 될 것이다.

기본적인 Layout 에서 팝업창으로 새 그룹을 생성하고 바로 화면을 갱신처리하는 일련의 코드이다.


    <div data-role="footer" data-position="fixed" data-theme="d">
        <table>
        <tr>
        <td width="15%"></td>
        <td width="70%" align=center>그룹 추가</td>
        <td width="15%" align=right><a href="#" data-role="button" data-icon="plus" data-iconpos="left" id="groupadd">추가</a></td>
        </tr>
        </table>       
    </div>
</div>
<div id="dialog-add" title="그룹 추가">
    <form>
        <p>새 그룹명</p>
        <input type="text" name="group" />
        <input type="hidden" name="uid" value='<?php echo $uid?>' />
        <input type="hidden" name="status" value='n' />
    </form>
</div>


추가 버튼(id="groupadd")을 누르면 dialog 창이 떠서 새 그룹명을 입력 받고 처리하도록 하고 싶다면??


먼저 jQuery 를 추가해야 한다.

https://jqueryui.com/dialog/ 사이트를 참조해서 아래 색깔로 표시된 것을 복사하여 붙여넣기 한다.


<link href="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.css" rel="stylesheet" type="text/css" />
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script src="js/group_dialog.js"></script> <!-- 작성할 jQuery 스크립트 -->


===== group_dialog.js ======

$(function(){
    $("#dialog-add").dialog({
        autoOpen: false,
        buttons:[
            {
                text: "추가",
                click: function(){
                    var uid = $("input[name='uid']").val();
                    var group = $("input[name='group']").val();                   
                    if(!group) { // 입력 여부 검사
                        alert("그룹명을 입력하세요");
                        $("input[name='group']").focus();
                        return false;
                    }
                    var status = $("input[name='status']").val();
                    GroupAdd(uid,group,status);
                }
            },
            {
                text: "취소",
                click: function(){
                    $(this).dialog("close");
                }
            }
        ]
    });

    $("#groupadd").click(function(){       
        $("#dialog-add").dialog("open");
    });

});

function GroupAdd(uid,group,status){
    $.post("GroupMake.php", {uid:uid, group:group,status:status}, function(msg){
        if(msg==1){
            location.reload(); // 화면 갱신처리 (같은 화면을 갱신처리하는 것임)          
        } else if(msg==0){
            alert('그룹 추가에 실패했습니다');
        } else if(msg=='-1'){
            alert('그룹이 이미 존재합니다');
        } else if(msg=='-2'){
            alert('DB 에러가 발생했습니다');
        }
        $("#dialog-add").dialog("close");
    });
}



======= GroupMake.php =====

바로 접속하는 걸 방지하는 코드는 생략했다. 간편하게 내용 중심으로 작성해두기 위해서....

<?php
include ('dbconnect.php');
require_once "class/GroupClass.php";
$c=new GroupClass;

if(strcmp($_REQUEST['status'],'n')==0){//추가   
    $rs=$c->NewGroup($_REQUEST['uid'],$group); // 즐겨찾기 그룹명 추가
    // rs : 1(성공), 0(실패), -1(중복), -2(DB error)
} else if (strcmp($_REQUEST['status'],'d')==0){//삭제
    $rs=$c->DelGroup($_REQUEST['uid'],$group);
    // rs : 1(성공), 0(실패)
}
echo $rs;  // jQuery 의
function(msg) 로 던져지는 결과값
?>


개념을 설명하는 자료이므로 class/GroupClass.php 파일 내용은 적지 않는다.

이 정도면 봐도 충분히 응용이 가능하다고 본다.


참고하면 도움되는 게시글 링크

https://www.oreilly.com/library/view/jquery-ui/9781449325176/ch04s05.html



블로그 이미지

Link2Me

,
728x90

<!DOCTYPE html>
<head>
<meta charset=UTF-8" />
<meta name="robots" content="noindex,nofollow"/> <!-- 검색엔진에서 검색 제외 -->
<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" /> <!--브라우저 호환성 설정 -->
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script>
$(function(){
    $("#sel2").click(function(){
        cw=screen.availWidth;     //화면 넓이
        ch=screen.availHeight;    //화면 높이

        sw=cw/2;    //띄울 창의 넓이
        sh=ch/2;    //띄울 창의 높이

        ml=(cw-sw)/2; //가운데 띄우기위한 창의 x위치
        mt=(ch-sh)/2; //가운데 띄우기위한 창의 y위치

        var url = $("#sel").val();
        if(url != '0'){
            window.open(url, 'tst','width='+sw+',height='+sh+',top='+mt+',left='+ml+',resizable=no,scrollbars=yes');
        }

    });
});
</script>
<body>
<select id="sel">
  <option value="0" >선택 사이트로 이동</option>
  <option value="http://link2me.tistory.com">My Blog</option>
  <option value="http://www.naver.com">네이버</option>
  <option value="http://www.daum.net">다음</option>
 </select><a href="#" id="sel2" >이동</a>

</body>
</html>

블로그 이미지

Link2Me

,
728x90

<input type="button" id="orderBtn" name="Test" value = "순서변경"></button>


MouseOver 시 손가락 모양 표시

css로 손가락 모양을 만든다.


    $('#orderBtn').css("cursor","pointer").click(function() {
        $.ajax ({
            type:"POST",
            url:"./order_process.php",
            data:ordered_items,
            success:function(data) {
                alert ("서열순서를 DB에 반영했습니다.");
            }
        });   
    });

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

jQuery 모달(dialog) 코드 이해하기  (2) 2016.10.11
jQuey 새창 띄우기  (0) 2016.07.11
jQuery 모달(modal) 윈도우  (0) 2016.05.01
JSON 기초  (0) 2016.04.24
부모창 새로 고침  (1) 2016.04.10
블로그 이미지

Link2Me

,
728x90

자바스크립트의 window.open() 로 팝업창을 열면 부모창에 대한 접근이 자유롭다. 하지만, modal 팝업창은 팝업창을 닫기 전까지는 부모창에 대한 접근이 불가능한 형태이다.


괜찮은 모달 jQuery

https://github.com/syakuis/jmodal



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

jQuey 새창 띄우기  (0) 2016.07.11
[jQuery] 마우스 오버시 손가락 모양 표시  (0) 2016.07.10
JSON 기초  (0) 2016.04.24
부모창 새로 고침  (1) 2016.04.10
[자바스크립트] 제대로 배우는 폼 전송 기초  (0) 2016.02.18
블로그 이미지

Link2Me

,
728x90

JSON(Javascript Object Notation)

구문형식은 자바스크립트를 따르지만, 언어로부터 완전 독립적이기 때문에 서로 다른 프로그래밍언어간에 데이터를 교환하기 위해 현재 가장 널리 사용되는 표기법이다.


XML 은 열기 태그와 닫기 태그를 일일이 써줘야 한다.

<name>홍길동</name>

<age>32</age>


JSON 은 key : value 로 간단하게 표기한다.

var kk = { "name" : "홍길동", "age" : 32 }


value 에는 문자열(string), 숫자, 객체(object), 배열(array), 불리언(boolean), null 이 들어갈 수 있다.


JSON 으로 코드를 구현할 경우 반드시 알아야 할 사항은 UTF-8 만 인식한다는 점이다.

파일 Encoding 모드가 ANSI로 되어 있으면 결과값을 돌려주지 못한다.


EditPlus 에디터에서 보면 화면 하단 오른쪽에 파일의 인코딩 모드가 무엇인지 알려준다.



JSON.parse()
인자로 전달된 문자열(string 객체)을 자바스크립트의 데이터(json 객체)로 변환한다.

JSON.stringify()
인자로 전달된 자바스크립트의 데이터(json 객체)를 문자열(string 객체)로 변환한다.


<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JSON Example</title>
</head>
<body>
<script>
    var mydetails = {
        "name" : "John",
        "age " : "31"
    };
    var jsonto = JSON.stringify(mydetails);
    console.log(jsonto);

    var data = '{"name": "식빵", "family": "웰시코기", "age": 1, "weight": 2.14}';  // JSON 형식의 문자열
    var dog = JSON.parse(data); // JSON 형식의 문자열을 자바스크립트 객체로 변환함.
    console.log(dog);
</script>
<script>
    function signup() {

        var member = {
            "email" : "test@naver.com",
            "password" : "1234"
        };

        $.ajax({
            url : '/abc/result.php',
            dataType : 'json',
            type : 'POST',
            data : JSON.stringify(member), //그냥 member 사용하면 error 발생!
            contentType : 'application/json; charset=UTF-8',
            success : function(result) {
                console.log(result);
            }
        });

    }
</script>
</body>
</html>


결과


 <script src="//ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
<script>
    $('#execute').click(function(){
        var formData = $('form').serialize();
        $.ajax({
            url:'./abc.php',
            type:'post',
            data:formData,
            success:function(data){
                $('#showtime').text(data);
            }
        });
    });
</script>

<!-- 문서에 여러개의 폼이 있을 경우 document.forms[index] 로 접근할 수 있다. -->
<script>
$("#sub").click(function(){
    $("form").each(function(){
        var fd = new FormData($(this)[0]);
        $.ajax({
            type: "POST",
            url: "solve.php",
            data: fd,
            processData: false,
            contentType: false,
            success: function(data,status) {
               //this will execute when form is submited without errors
           },
           error: function(data, status) {
               //this will execute when get any error
           },
       });
    });
});
</script>


블로그 이미지

Link2Me

,
728x90

상위화면 새로 고침을 적어둔다.

<script type="text/javascript">

top.window.location.reload(true);

</script>


새창이 열린 상태에서 부모창을 reload 하고 자신의 창을 닫을 때

<script type="text/javascript"> 
<!-- 
window.opener.parent.location.reload(); // 부모창 새로고침 
window.self.close(); // 현재 팝업 닫기
//--> 
</script>


window.opener는 자식창을 열어준 창을 가리킨다. 

window 를 생략하면 브라우저 특성을 탈 수 있다. 그러므로 반드시 window 를 붙여주는게 좋다.

개발자들이 익스플로러에서만 테스트하면서 window를 생략하는 경우가 있다.


자기자신의 창을 reload 할 경우에는

<script type="text/javascript"> 
<!-- 
location.reload(true);  // 페이지 새로 고침시 서버에서 불러옴 
//--> 
</script>

를 쓰면 될 거 같지만 이 경우에는 if 문을 잘 사용해야 된다.

잘못하면 화면을 계속 reload 하게 될 수 있다.




블로그 이미지

Link2Me

,
728x90

자바스크립트에서 값이 참일 경우에만 폼 전송이 이루어지게 하는 예제이다.


<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<script language="JavaScript">
function send(f) {
    if (confirm('폼의 값을 전송할까요?')==1) {
        f.submit();
        window.close();
    }
}
</script>
</HEAD>
<BODY>
<form name=bbsSearch action= "http://www.naver.com">
<input type=button value="보내기" onClick=send(this.form) >
</form>
</BODY>
</HTML>


설명

조건문에서 1은 참(true), 0 은 거짓(false)을 나타낸다.

send(form) 에서 f 은 호출할 때 전달받은 인자(객체, 값 등)를 담은 함수의 매개변수다.

onClick=send(this.form) 에서 this.form 이 send 함수의 f 변수에 담겨진다.

var f = <form name=bbsSearch action= "http://www.naver.com"> 와 같은 의미다.

하지만 자바스크립트에서는 위와 같이 적어 사용할 수 없고

this.form 대신에 직접 객체를 찾아 대입한다면

var f=document.forms['bbsSearch'];  // form 중 이름이 bbsSearch 인 form 객체를 변수 f 에 대입

처럼 사용해야 한다.


onSubmit="return checkForm(this)" → 폼 전송이 이루어지기 전에 먼저 checkForm(this) 함수를 실행하고, 함수실행 결과로 전달 받은 값이 false라면 폼전송을 하지 않고, true라면 폼 전송을 해라.


자바스크립트 로그인 예제 파일이다. 첨부파일은 하단에 있으니 받아서 테스트해보면 된다.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="form1.css"  />
</head>
<body>
<script>
function validateForm(){
    var sform = document.forms["s_form"];
    if(!sform.loginID.value){
        alert('아이디를 입력하세요');
        sform.loginID.focus();
        return false;
    }
    if(sform.loginPW.value ==''){
        alert('패스워드를 입력하세요');
        return false;
    }
}
</script>
<div class="container">
<h2>Form 예제1</h2>
<form name="s_form" method="post" action="form1.action.php" onsubmit="return validateForm();">
    <table>
        <tr>
            <td>로그인 ID</td>
            <td><input type="text" name="loginID" value=""></td>
        </tr>
        <tr>
            <td>패스워드</td>
            <td><input type="password" name="loginPW"></td>
        </tr>
        <tr>
            <td colspan='2' align='center'><input type="submit" value="전송"></td>
        </tr>
    </table>
</fom>
</div>
</body>
</html>


아래 예제는 전송 버튼에 onclick 를 추가해서 시도해본 예제다.

<form name="s_form" method="post" action="#"> 기본 action 경로를 파일명으로 지정하지 않고도 자바스크립트에서 추가해서 보낼 수 있다는 걸 확인할 수 있다.

만약 <form name="s_form" action="#"> 와 같이 method 방식을 지정하지 않으면 default 인 method="get" 으로 동작된다는 것도 알아두자.

자바스크립트 코드에서 sform.method = "post"; 를 추가해주면 POST 방식으로 전송된다.

즉, 이 예제는 Form 의 기본 속성을 자바스크립트가 제어할 수 있다는 걸 보여주는 예제이다.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="form1.css"  />

</head>
<body>
<script>
function validateForm(){
    var sform = document.forms["s_form"];
    if(!sform.loginID.value){
        alert('아이디를 입력하세요');
        sform.loginID.focus();
        return false;
    }
    if(sform.loginPW.value ==''){
        alert('패스워드를 입력하세요');
        sform.loginPW.focus();
        return false;
    }
    sform.method = "post";
    sform.action = "form1.action.php"; // 이 줄을 주석처리하면 어떤 결과가 될까?
}
</script>
<div class="container">
<h2>Form 예제2</h2>
<form name="s_form" method="post" action="#">
    <table>
        <tr>
            <td>로그인 ID</td>
            <td><input type="text" name="loginID" value=""></td>
        </tr>
        <tr>
            <td>패스워드</td>
            <td><input type="password" name="loginPW"></td>
        </tr>
        <tr>
            <td colspan='2' align='center'><input type="submit" value="전송" onclick="return validateForm();"></td>
        </tr>
    </table>
</fom>
</div>
</body>
</html>


여기서 onclick="return validateForm();" 대신에 onclick="validateForm();" 로 하면 어떤 현상이 발생할까?

아래에서 첫번째 것은 아이디, 패스워드 등을 물어보는 팝업창이 한번 뜨고 form 전송 이벤트가 바로 실행되는 걸 확인할 수 있을 것이다.

두번째 것은 form action 을 자바스크립트에서 지정해주었기 때문에 순차 실행을 하다가 return false 를 실행하고 나서 form action 을 실행할 수가 없기 때문에 화면이 action 파일명으로 넘어가지 못한다.

sform.action = "form1.action.php"; 를 if 조건문 위쪽에 적었다면 팝업창을 띄워 입력값을 확인하지만 값이 입력되지 않았음에도 불구하고 실행된다는 걸 확인할 수 있다.

<form name="s_form" method="post" action="form1.action.php">

<script>
function validateForm(){
    var sform = document.forms["s_form"];
    if(!sform.loginID.value){
        alert('아이디를 입력하세요');
        sform.loginID.focus();
        return false;
    }
    if(sform.loginPW.value ==''){
        alert('패스워드를 입력하세요');
        sform.loginPW.focus();
        return false;
    }
}
</script>

<form name="s_form" method="post">

<script>
function validateForm(){
    var sform = document.forms["s_form"];
    if(!sform.loginID.value){
        alert('아이디를 입력하세요');
        sform.loginID.focus();
        return false;
    }
    if(sform.loginPW.value ==''){
        alert('패스워드를 입력하세요');
        sform.loginPW.focus();
        return false;
    }
    sform.method = "post";
    sform.action = "form1.action.php";
}
</script>


jsfrm1.zip



도움이 되셨다면 00 00 해 주세요.

블로그 이미지

Link2Me

,
728x90

설문조사를 만들다보면 체크박스를 여러개 선택하도록 해야 하는 경우가 있다.
이 경우에 사용할 수 있는 자바스크립트 코드이다.
자바스크립트는 초보수준이라 잘 모르는 것은 네이버지식인, 주변 지인 문의, 블로그 검색 등을 하면서 배우고 있는 중이다. 필요한 순간에 써먹을 수 있도록 하기 위해 기록해둔다. 아래 코드는 100% 동작되는 코드이다.

자바스크립트는 자신을 호출한 객체를 가르킬 때 this 키워드를 사용한다. 자바스크립트는 모든 호출이 객체를 통해 이루어지는 매커니즘이다.

this 키워드는 '명시적 객체' 만을 참조한다. 명시적 객체가 없으면 전역객체를 찾는다.



<SCRIPT LANGUAGE="JavaScript">
<!--
function fchk() {
    var chk_obj = document.getElementsByName("box_chk");
    var chk_leng = chk_obj.length;
    var checked = 0;
    for (i=0; i < chk_leng; i++) {
        if (chk_obj[i].checked == true) {
            checked += 1;
        }
    }
    if (checked < 2 ) {
        alert("항목을 2개 선택해주세요");
        return;
    }
}

// 정해진 개수 이상 체크 불가.
var count = 0;
function check_q1(chk_obj) {
    if(chk_obj.checked == true) {
        count++;
    } else {
        count--;
    }
    if(count <= 2) {
        return true;
    } else {
        count--;
        return false;
    }
}

function check(obj,condition, n) {
    if(condition == false){
        obj.checked = false;
        alert(n + "개를 초과 선택 불가합니다");
    }
}
//-->
</SCRIPT>

<form name="bbssearch" method="post" action="" onsubmit="return fchk();">
<input name="box_chk" type="checkbox" value="1" onclick="check(this,check_q1(this),2);" />박스1
<input name="box_chk" type="checkbox" value="2" onclick="check(this,check_q1(this),2);" />박스2
<input name="box_chk" type="checkbox" value="3" onclick="check(this,check_q1(this),2);" />박스3
<input name="box_chk" type="checkbox" value="4" onclick="check(this,check_q1(this),2);" />박스4
<input name="box_chk" type="checkbox" value="5" onclick="check(this,check_q1(this),2);" />박스5

<input type="submit" value=" 검색 " class="btngray" />
</form>



onSubmit="return fchk()" → 폼 전송이 이루어지기 전에 먼저 fchk() 함수를 실행하고, 함수실행 결과로 전달 받은 값이 false라면 폼전송을 하지 않고, true라면 폼 전송을 해라

블로그 이미지

Link2Me

,
728x90

document.getElementsByName(이름) 은 object 의 name 을 통해 인식한다.

id나 name을 이용해서 value 값을 가져오는 건데, 차이점이라면 getElementById(아이디)로 가져오면 단일값을 가져오고 getElementsByName(이름)은 해당 이름으로 된 객체를 모두 배열로 받아올 수 있다는 점이다.

ID를 가져오는 함수인 getElementById 와 다르게, name은 중복될 수 있는 요소이기 때문에 Element 에 s가 붙어 복수형이 된다. getElementsByName 을 쓸때에는 첫글자를 대문자로 쓰면 안된다.

비록 객체가 한개일지라도 배열로 값을 받아야 받을 수 있다. 즉,

    var obj = document.getElementsByName("objectName");

    alert(obj[0].value);

 


<SCRIPT LANGUAGE="JavaScript">
<!--
function fchk() {
    var chk_obj = document.getElementsByName("box_chk");
    var chk_leng = chk_obj.length;
    var checked = 0; //체크된 개수 파악을 위한 초기변수
    for (i=0; i < chk_leng; i++) {
        if (chk_obj[i].checked == true) {
            checked += 1;

              alert(chk_obj[i].value);    // 선택된 순서대로 값을 출력
        }
    }
    if (checked == 0 ) {
        alert("선택된 정보가 없습니다");
        return;
    } else {
        alert(checked + "개 선택");
        return;
    }
}
//-->
</SCRIPT>

<form name="bbssearch" method="post" action="" onsubmit="return fchk();">
<input name="box_chk" type="checkbox" value="1" />박스1
<input name="box_chk" type="checkbox" value="2" />박스2
<input name="box_chk" type="checkbox" value="3" />박스3
<input name="box_chk" type="checkbox" value="4" />박스4
<input name="box_chk" type="checkbox" value="5" />박스5

<input type="submit" value=" 검색 " class="btngray" />
</form>


특정한 값을 직접 변수로 저장하고 싶은 경우에는

function fchk() {

   var selectedvalue = document.bbssearch.box_chk[3].value;

   alert(selectedvalue);

}

로 해서 확인해 볼 수 있다.

form 이름 bbssearch 밑에 input name 인 box_chk 의 배열값을 직접 적어준다.


jQuery checkbox 선택 개수 체크는 http://link2me.tistory.com/1448 참조하면 된다.


블로그 이미지

Link2Me

,
728x90

자바스크립트에서 사용되는 API 이다.


함수

설 명

 getElementById( )

 특정 id 속성값에 해당하는 요소를 반환
<div id ="idname">
getElementById("idname");

 getElementsByName( )

 특정 name 속성값에 해당하는 요소를 반환
<input type="text" name="name">
getElementsByName("name");

 getElementsByTagName( )

 특정 태그 이름과 일치하는 모든 요소를 반환
<input type="text">
getElementsByTagName("input");

 getElementsByTagNameNS()

 태그의 name 속성의 값과 일치하는 모든 요소를 반환
<input type="text" name="emai");
getElementsByTagNameNS("email");

 querySelector()

 페이지내에서 특정 선택자 규칙과 일치하는 첫 번째 요소를 반환
<input class="error">
querySelector("input.error");

 querySelectorAll()

 특정 선택자 규칙 또는 여러 규칙과 일치하는 모든 요소를 반환
<div id="rest"><table><tr><td>…
querySelectorAll("#rest td")


Selector API를 이용해 DOM 트리로부터 HTML DOM 객체를 가져오기 위해서는 자바스크립트 코드 실행이 HTML  문서가 파싱된 다음 실행되어야 함
HTML 문서가 파싱되기 전에 자바스크립트 코드가 실행되면 Selector API로 HTML DOM 객체를 DOM Tree 에서 찾지 못함

자바스크립트 코드가 HTML 파싱이 완료된 다음 실행되게 하기 위해서는 ....
1. 자바스크립트 코드를 외부 파일로 작성했을 경우 defer 속성을 부여함
   <script src="xxx.js" defer></script>
2. HTML 문서 본문의 맨 아래 <script>코드를 이용하여 자바스크립트 코드를 작성함
3. <script>요소를 이용해 자바스크립트 코드를 <head>요소에 포함시킬 수 있는데
   onload 이벤트를 이용하여 페이지가 로드된 다음 자바스크립트 코드가 실행되도록 함

블로그 이미지

Link2Me

,
728x90

jQuery 는 DOM과 관련된 처리, 일관된 이벤트 연결, 애니메이션(시각적효과), AJAX Application 개발 등을 손쉽게 할 수 있는 강력한 기능을 가진 일종의 자바스크립트 라이브러리다. 즉, jQuery는 크로스브라우징(모든 브라우저에서 동작하는) 클라이언트 사이드의 자바스크립트 라이브러리이다.

jQuery는 사용법이 간단하고, 코딩이 직관적이며, 성능도 뛰어나다.


DOM(Document Object Model)은 웹문서에서 HTML의 문서 요소를 제어하기 위한 문법적인 구조로 W3C에서는 DOM의 표준 규격을 제시했다.
- DOM은 document(문서), object(객체), model(모델)을 의미하는 용어로서 문서는 HTML을 의미한다.
- 객체는 자바스크립트에서 HTML문서전체에 존재하는 요소들을 객체로 인식한다는 의미이다.
- 이 객체는 DOM형식에 있어 노드(node)라는 개념으로 전환되며 element, text, attribute등의 노드가 존재하게 된다
- Text node
  . HTML 웹 문서의 실제 내용을 의미하게 된다.
  . TEXT node는 반드시 element node 안에 포함되어 있어야 한다.
    그러나 TEXT node가 element node 를 포함하거나 attribute node를 소유할 수는 없다.
- Attribute node
  . 모든 attribute node는 <html> 태그 내에 포함 된다.
  . attribute node는 (속성,값)의 한쌍으로 표현된다.
  . attribute node는 element node 안에 포함되며, element node 를 포함 시킬 수 없다
- javascript코드는 노드에 접근하기 위해 getElementById, getElementByTagName등의 메소드를 이용한다.
  . getElementById : 특정 아이디를 가지고 있는 태그에 접근한다.
  . getElementByTagName : 특정 태그에 접근한다
  . getAttribute : 원하는 태그의 속성을 가져온다
  . setAttribute : 원하는 태그의 속성의 값을 설정한다.


jQuery 에는 자바스크립트에서 볼 수 없는 다양한 애니메이션 효과의 구현을 위한 기능적인 함수들이 많이 추가되어 있다.


var h1 = document.getElementById("hello");

를 jQuery 로 하면

var h1 = $("#hello");

로 간단해진다.


A $ sign to define/access jQuery

A (selector) to "query (or find)" HTML elements

A jQuery action() to be performed on the element(s)


 $("#셀렉터") = document.getelementbyid("셀렉터")
 $(".셀렉터") = document.getElementsByClassName("셀렉터")
 $("태그명") = document.getelementsbytagname("셀렉터")


jQuery 를 사용하는 방법은

1. 라이브러리 파일을 다운로드 받아서 직접 연결하여 사용하는 방법

2. CDN을 이용하는 방법

    http://code.jquery.com/jquery-latest.js 를 사용하면 가장 최신 버전으로 자동 연결된다.

    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>


    구글 CDN 이용 방법

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


$(selector).action(function() { 소스코드} );  // 내가 원하는 다른 명령을 넣어 함수를 고치고 싶을 때


$(document).ready(function() {
   $("#myclick").click(function() {
      $("myclick").html("눌렀어요");
   });
});


브라우저에서 방문객이 취하는 모든 동작을 이벤트라고 한다.

이벤트가 발생했을 때 자바스크립트/jQuery 실행문을 실행하는 것을 이벤트 핸들러라고 한다.

이벤트는 마우스 이벤트, 키보드 이벤트, 기타 이벤트로 구분할 수 있다.


선택자에 document 가 오면 html 문서 전체가 선택된다.

자바스크립트 또는 jQuery 의 위치가 <head> </head> 사이에 위치한다.

jQuery 는 인터프리터 언어이기 때문에 jQuery가 먼저 실행되고 난 후 <body> 영역에 문서 객체가 로딩된다.

이렇게 되면 선택자가 먼저 실행되어 문서 객체를 선택할 수 없다.

<body> 객체 영역에 문서 객체가 먼저 로딩된 후 jQuery 선택자가 선택되게 하려고 $(document).ready(function(){ 코드 } 또는 간략하게 $(function(){ 코드} 방법을 사용한다.


id 선택자가 #myclick 인 a 엘리먼트가 사용자에 의해 클릭되었을 때 실행된다.

클릭이 되면 $("myclick").html("눌렀어요"); 를 통해서 a 엘리먼트의 내용을 "눌렀어요"로 바꾸게 된다.


.attr()은 attribute 정보를 가져오고,
.prop()는 property 정보를 가져온다.

attrubute는 HTML Element 의 속성들을 의미하며
property는 자바스크립트의 프로퍼티를 의미한다.

$("#menu li") 는 #menu 안에 있는 모든(child & descendant) li를 가리키고
$("#menu > li") 는 #menu 바로 아래의 li만 가리킨다. 즉 $("parent > child") 관계에 해당되는 li 가 5개라면 5개가 해당되고 자손(descendant) 요소는 해당되지 않는다.


※ $("기준요소 > 자식요소") ← 선택한 기준 요소를 기준으로 자식(child) 관계에 지정한 요소만 선택한다.

    $("기준요소    하위요소")  ← 선택한 기준요소를 기준으로 자식(child), 자손(descendant) 해당되는 요소를 선택한다.


$("div + p").css("background-color", "#82fcc1");

의미 : div 태그와 동등한 위치에 있는 p 태그 중에서 div 바로 다음에 나오는 태그만 배경색을 변경하라.


$("div ~ p").css("background-color", "#82defc");

의미 : div 태그와 동등한 위치에 있는 p 태그 중에서 div 태그 이후에 나오는 모든 태그의 배경색을 변경하라.

          div 태그 이전에 나오는 p 태그는 해당되지 않는다.

          div 태그의 child, descendant 태그는 해당되지 않는다.


$("[attribute]") : [attribute(속성)] selector는 각 selector의 특정 속성을 선택한다.
- [attribute=value] : 특정 속성과 값을 가진 각 element를 선택한다.
- [attribute!=value] : 특정 속성과 속성 값을 안 가진 element를 선택한다.
- [attribute$=value] : 특정 문자값으로 끝나는 selector를 선택한다.
- [attribute|=value] : 특정문자로 시작하는 속성과 속성 값을 설정한다.
- [attribute^=value] : 특정 속성이 특정 속성 값으로 시작하는 값을 갖는 selector을 설정한다.
- [attribute~=value] : 특정 속성이 특정 속성 값을 포함하는 selector를 설정한다.
- [attribute*=value] : 특정 속성이 특정 값의 일부분(문자열)을 포함하는 selector를 선택한다.


 $("셀렉터").html()

 셀렉터 태그내에 존재하는 자식태그을 통째(html + text)로 읽어올때

 $("셀렉터").text()

 셀렉터 태그내에 존재하는 자식태그들 중에 문자열(text)만 출력하고자 할때

 $("셀렉터").val()

 INPUT 태그에 정의된 value 속성의 값을 확인하고자 할때

 

 $("태그[속성명=속성값]")

 <input type="checkbox" value="1"  />

 var checkbox_val = $("input[type=checkbox]").val();

 <input type="text" id="txt" value="2"  />
 var text_val = $("input[id=txt]").val();



 $(":input태그의type명")

 <input type="checkbox" value="1"  />

 var checkbox_val = $(":checkbox").val();

 <input type="text" value="2"  />
 var text_val = $(":text").val();


<li> 태그 안에 있는 <a> 태그의 href 속성 값이 "http"로 시작하는 <a> 태그를 선택
$("li a[href^='http']").css({color:"#f90"});

<li> 태그 안에 있는 <a> 태그의 href 속성 값이 "com/"으로 끝나는 <a> 태그를 선택
$("li a[href$='com/']").css({color:"#f90"});

<li> 태그 안에 있는 <a> 태그의 href 속성 값이 "5"가 포함되어 있는 <a> 태그를 선택
$("[href*='5']").css({color:"#f90"});

<img> 태그의 src 속성이 "images/sample1.jpg"와 일치하지 않는 이미지 태그를 선택
$("img[src='images/sample1.jpg']").css({border:"1px solid #f90"});
$("img[src!='images/sample1.jpg']").css({border:"1px solid #f90"});

<li> 태그 안에 있는 <a> 태그의 class 속성이 있는 모든 태그를 선택
$("li a[class]").css({color:"#f90"});


기본 필터 선택자 :

filter 선택자에 사용되는 형식은 filter 선택자 앞에 :(클론)을 붙여 표현한다.

- $("li:eq(6)").css({"background-color":"#666", color:"#fff"}); // li 항목 중에서 index가 6인 <li> 태그 선택

- $("li:gt(6)").css({"background-color":"#666", color:"#fff"}); // index가 6 뒤에 있는<li> 태그 모두 선택

- $("li:lt(6)").css({"background-color":"#666", color:"#fff"}); // index가 6 앞에 있는 <li> 태그들을 모두 선택

- $("li:first, li:last").css({"background-color":"#666", color:"#fff"}); // <li> 태그 중 처음과 마지막 노드 선택

- $("li:not(:eq(6))").css({"background-color":"#666", color:"#fff"}); // <li> 태그 중 index가 6인 것을 제외한 나머지를 선택

보다 상세한 Selector 속성은 https://www.w3schools.com/jquery/jquery_ref_selectors.asp 참조


// 스크롤 따라다니는 박스 div jquery
var currentPosition = parseInt($("#sidebox").css("top"));
$(window).scroll(function() {
       var position = $(window).scrollTop();
       $("#sidebox").stop().animate({"top":position+currentPosition+"px"},1000);
});


// 롤오버(rollover) 이미지

<script type="text/javascript">
    $(function() {
        $("img[src='images/aaa.jpg']").hover(function() {           
            $(this).attr("src", "images/aaa_on.jpg"); // 변경할 이미지
        }, function() {
            $(this).attr("src", "images/aaa.jpg");  // 원래 이미지
        });

        $("img[src='images/bbb.jpg']").hover(function() {
            $(this).attr("src", "images/bbb_on.jpg");
        }, function() {
            $(this).attr("src", "images/bbb.jpg");
        });

    });
</script>


<script type="text/javascript">
    $(function() {
        // :eq(n)은 특정 셀렉터가 여러개의 복수 요소를 지정할 경우
        $("#box > input:eq(0)").click(function() { //첫 번째 input 버튼을 누른 경우
            $("#box > div").toggle(300);  // slideToggle(300); fadeToggle(300);
        });

        $("#box > input:eq(1)").click(function() {
            $("#box > div").show(200);  // slideDown(200); fadeIn(200);
        });

        $("#box > input:eq(2)").click(function() {
            $("#box > div").hide(200);  // slideUp(200); fadeOut(200);
        });

    });
</script>


도움될 사이트 : http://hellogk.tistory.com/



블로그 이미지

Link2Me

,
728x90

이클립스를 사용하여 코드를 타이핑하면서 연습해보자.






자바스크립용으로 파일을 생성시켜 봤더니 아래 화면이 default 로 나온다.



이제 실제로 코드를 한번 연습해보자.




Ctrl + Spacebar 만 눌러도 자동완성 시킬 내용이 나온다.

이 부분이 엄청 편해서 코딩하는 실수를 상당히 줄이면서 가능할 수도 있겠다 싶다.


블로그 이미지

Link2Me

,
728x90

아래 코드는 내 웹사이트 직접 구현된 코드의 일부이다.

<script language="javascript">
//<![CDATA[
function SelectedCategory(relateduid,uid)
{
    if (relateduid == 0)
    {
        document.bbssearchf.cat1.value=uid;
        document.bbssearchf.cat2.value='';
    }
    else {
        document.bbssearchf.cat1.value=relateduid;
        document.bbssearchf.cat2.value=uid;
    }
    document.bbssearchf.submit();
}

//]]>
</script>


//<![CDATA[ 는 유효성 검사 오류를 막기 위해서 선언


비교 연산자


 연산자

 설명

 ==

 동일한

 ===

 데이터 및 형(type)이 일치할 때 true

 !=

 동일하지 않은

 !==

 데이터 및 형(type)이 불일치할 때 true

 >

 ~ 보다 큰

 <

 ~ 보다 작은

 >=

 ~ 보다 크거나 동일한

 <=

 ~ 보다 작거나 동일한

 

예제를 하나 살펴보면서 확인해보자.

이클립스에서 HTML5 를 선택하고 자바스크립트를 7번 라인과 8번 라인에 적었다.


7번 라인 결과는 참일까? 거짓일까?

아래 결과를 보니까 false 라고 나온다. 왜일까?

연산은 좌측에서 우측으로 계산을 한다. 1000 > 100 부터 계산을 한다. 이 두개의 비교는 참이다. 참(true) 은 1을 반환한다. 다음 계산은 1 > 10 이므로 false 가 된다.

8번 라인은 && 로 구분하여 비교를 했으므로 && 왼쪽의 수식의 결과는 true, 오른쪽의 수식의 결과도 true 이므로 결과는 true 를 반환한다.

아래는 이 코드를 직접 웹브라우저 상에서 볼 수 있도록 설정하는 방법을 화면으로 표시한 것이다.



논리 연산자


연산자

 설명

 &&

 AND (그리고)

 ||

 OR (또는)

 !

 NOT (아닌)

 

논리합 연산자는 true 가 1개라도 있으면 true 를 반환한다.

논리곱 연산자는 모두 true 이면 true 를 반환한다.

아래 예제를 통해 살펴보면, 의미가 명확해질 것이라고 본다.

console.log 는 웹 브라우저 콘솔화면에 찍겠다는 뜻이다. HTML 파일을 저장하고 웹브라우저에서 확인하면 아무것도 보이지 않는데, F12 키를 눌러서 콘솔에서 확인하면 우측 그림처럼 보인다.

console.log(a && b && c); // 변수 a 에 값이 할당되지 않았으므로 undefined 이다.

&& 연산자는 처음부터 false 이면 뒤는 계산하지 않고 바로 false 값을 돌려준다.

console.log(a || b || c ); // 변수 a 는 값이 없으므로 false, b=20 이므로 참, 결과는 20

|| 연산자는 앞에서 부터 처음으로 true 가 나오는 지점에서 더 이상 우측으로 계산을 하지 않는다.


이번에는 화면에 출력하는 코드로 작성을 했다.

줄바꿈 document.write("<br />"); 을 넣어줘야 다음 줄에 표기기 된다.



블로그 이미지

Link2Me

,
728x90

자바스크립트 기초

morden Javacript 변수 선언

let : 변수 (변수를 선언 할 때에는 let 이라는 키워드를 사용)

   let value = 1;

   let value = 2;

   ※ 한번 선언했으면 똑같은 이름으로 선언하지 못한다.

   

const : 상수 (한번 선언하고 값이 바뀌지 않는 값)

 

 

ㅇ 변수(Variable)
   - 변수는 변화하는 값을 저장하는 공간이다. 변수는 한번에 1개의 데이터만 저장 가능하다.
   - 변수의 선언은 변수만 선언하고 값을 할당하지 않거나, 값을 할당하기도 한다.
     var temp;  // morden Javascript 에서는 더 이상 var 변수를 사용하지 않는다.
     var temp, i, data;
     var temp = 10;

  - 변수명은
     대문자 Temp 로 작성했으면 출력하거나 다른 곳에서 이용할 때 temp 라고 하면 에러가 발생한다.
     변수명은 반드시 영문자, 숫자, _(underbar, underscore) 로만 사용해야 하며, 공백문자는 포함할 수 없다.
     키워드를 사용할 수 없고, 변수 이름의 길이에는 제한이 없다.

     첫글자가 숫자로 시작할 수 없다.

     !, #, ?, $, @ 등과 같은 특수문자는 올 수 없다.

     자바스크립트 문법 안에서 규정한 예약어(키워드)는 변수로 사용할 수 없다.


   - 자바스크립트 데이터 타입(변수에 저장 가능한 데이터)
     숫자형 데이터, 문자형 데이터, 논리형(boolean)형 데이터, 널(Null)형 데이터 이다.
     변수형을 선언할 때에는 숫자형, 문자형 등을 구분하지 않는다.
     숫자형 변수는 정수, 실수 구분이 없다.
     문자열 변수는 작은 따옴표 나 큰 따옴표로 감싸야 한다.
     status = "My computer is working."
     document.write(status);

 

참, 거짓 판별

   - 자바스크립트에서는 소문자로 true 와 false 를 판별한다.

     TRUE는 '정의되지 않음' 오류가 발생한다.

     즉, 불린(boolen) 타입 : true/false

   - 참인지 거짓인지 확인할 때

     거짓으로 평가되는 false 문자열 자체와 0, -0, 빈 문자열, null, 비정의, NaN 을 제외하고는

     모든 값은 참으로 간주한다.

      즉, 비교결과가 0, null, 빈문자열(""), false, undefined, NaN 으로 판단되면 false 다.
     if(1 == true) document.write('true') // 참

ㅇ 자료형 확인 : typeof 연산자를 이용
     - 언제든지 type of 연산자를 이용해 변수의 형식을 확인할 수 있다.
     - 변수를 var n 으로 선언했다면, type of n 으로 확인한다.
   <script>

     alert(typeof('String')); //String
     alert(typeof(123)); //Number
     alert(typeof(true)); //Boolean
     alert(typeof(function(){})); //Function
     alert(typeof({})); //Object
     alert(typeof(abc)); // undefined : 아직 값이 설정되지 않는 것을 의미
       // 변수를 선언했지만 초기화를 하지 않았을 경우에도 undefined 출력된다
   </script>

ㅇ 이용문법
   - \n : 줄바꿈
   - 문자열 연결은 + 를 사용한다.
     '이런'+'식으로도'+' '+'출력 가능'
     PHP 에서는 마침표(.)로 문자열을 연결한다.
   - \t : Tab
   - \' : 작은 따옴표
   - \" : 큰 따옴표
   - \\ : 역슬레쉬(\)
   - %  : 나머지 연산자, alert(5 % 3);
   - 변수 : 값을 저장할 때 사용하는 식별자, 변수선언 var 식별자;

 

ㅇ 연산처리

   - 자바스크립트의 연산자는 수식의 왼쪽에서 오른쪽으로 처리된다.

   - || 연산자는 첫번째 피연산자가 참(true) 이면, 두번째 피연산자는 실행되지 않는다.

     의도하지 않는 문제가 발생할지 잘 확인해야 한다.

   - 다중 대입(a = b = c = 5) 은 가장 오른쪽이 먼저  실행되고, 오른쪽에서 왼쪽으로 계속 처리된다.

 

ㅇ 객체(object)

    - 자바스크립트는 객체지향언어는 아니지만, 객체를 사용하기 때문에 객체(object) 기반 언어라고 한다.

      객체는 속성(property)과 methods 를 가진다.

    - 자바스크립트의 객체는 내장 객체, BOM(브라우저 객체 모델), DOM(문서 객체 모델)로 나눌 수 있다.

    - 내장 객체를 생성할 때는 new 라는 키워드와 생성함수를 사용한다. (ex, var 참조변수=new Date();)

      내장 객체인 경우는 자체 자바스크립트 문법에서 정의된 속성과 메소드를 알아야 한다.

    - 객체 생성할 때 생성자 함수가 필요없는 객체 : Math Object, Number Object, String Object, RegExp Object

    - parseInt("20.5px") + 30 = 50

    - parseFloat("20.5px") + 30 = 50.5

    - function으로 정의된 생성자 함수의 객체의 정의는 new를 이용한다.
    - 생성자함수 안에는 this라는 용어를 이용해 정의한다.

 

ㅇ 객체배열은 http://link2me.tistory.com/1458 참조

 

ㅇ 윈도우 객체

    window 객체는 객체의 계층 구조에서 최상위에 존재하며 가장 기본적이면서도 중요한 객체다.

 

window.속성
window.속성 = 값  // window.status="환영합니다."
window.메소드()  // window.open();

window.메소드(인자 값)
--- window 객체의 속성 ---
- status : 상태 표시줄에 표시할 문자열 지정
- window : 창 자신을 가리킴
- frames : 창에 포함된 프레임을 배열 형태로 지정
- opener : open() 메소드를 사용해서 새 창을 열었을 경우, 새 창을 열도록 한 문서를 가리킴
- parent : 주종 관계를 이루고 있는 프레임 문서에서 상위 프레임을 가리킴
- self   : 현재 작업 중인 창, 즉 자기자신을 가리킴
- top    : 프레임이 설정되기 전의 상태로 돌아감, 프레임을 모두 무시하고 창 하나만 남음
- screenX : 창의 x 좌표 반환
- screenY : 창의 y 좌표 반환
- closed  : 창이 닫혀 있는지 확인한 후 true, false 반환
- name    : 창 이름 반환

 

window 객체 메서드
- alert() : 경고용 대화상자를 띄워줍니다.
- confirm() : 확인, 취소를 선택할 수 있는 대화상자를 띄워줍니다.
- open() : 새로운 창을 오픈합니다.
- prompt() : 입력창이 있는 대화상자를 띄워줍니다.
- setTimeout() : 일정 간격으로 함수를 호출하여 수행합니다. (Millisecond 단위)
- clearTimeout() : setTimeout 메소드를 정지합니다.
- eval() : 문자열을 숫자로 변환합니다.
- toString() : 오브젝트를 문자열로 변환합니다.
- blur() : focus가 다른 객체로 이동합니다.
- focus() : focus를 지정합니다.
- scroll() : 창을 스크롤 합니다.
- valueOf() : 오브젝트 값을 반환합니다.
- back() : 한 단계 전 URL(이전화면)로 돌아갑니다. (IE 지원 불가)
- find() : 창안에 지정된 문자열이 있는지 확인, 있다면 true 없으면 false를 반홥합니다. (IE 지원 불가)
- forward() : 한 단계 뒤의 URL(다음화면)로 이동랍니다. (IE 지원 불가)
- home() : 초기화 홈페이지로 이동합니다. (IE 지원 불가)
- moveby() : 창을 상대적인 좌표로 이동합니다. 수평방향과 수직방향의 이동량을 픽셀로 지정합니다.
- moveto() : 창을 절대적인 좌표로 이동합니다 . 창의 왼쪽 상단 모서리를 기준으로 픽셀을 지정합니다.
- resizeby() : 창의 크기를 상대적인 좌표로 재설정합니다 . 밑변의 모서리를 기준으로 수평방향, 수직방향을 픽셀로 지정합니다.
- resizeto() : 창의 크기를 절대적인 좌표로 재설정합니다 . 창 크기를 픽셀로 지정합니다.
- scrollby() : 창을 상대적인 좌표로 스크롤합니다. 창의 표시영역의 수평방향과 수직방향에 대해 픽셀로 지정합니다.
- scrollto() : 창을 절대적인 좌표를 스크롤합니다. 창의 왼쪽 상단 모서리를 기준으로 픽셀로 지정합니다.
- stop() : 불러오기를 중지합니다. (IE 지원 불가)
- captureEvents() : 모든 타입의 이벤트를 판단합니다.
- setInterval() : 일정시간마다 지정된 처리를 반복합니다.
- clearInterval() : setInterval 메소드의 정지합니다.
- print() : 화면에 있는 내용을 프린터로 출력합니다.
- handleEvent() : 이벤트 취급자를 정합니다.
- releaseEvent() : 다른 계층의 이벤트로 이벤트를 넘깁니다.
- routeEvent() : 판단한 이벤트와 같은 계층의 이벤트입니다.
- toSource() : 오브젝트값을 문자열로 반환합니다.

window 객체 이벤트 핸들러
- onLoad : 문서를 읽을 때 발생합니다.
- onUnload : 현재 문서를 지울려고 할 때 합니다.
- onBlur : 브라우저가 포커스를 잃을 때 발생합니다.
- onFocus : 브라우저에 포커스를 얻을 때 발생합니다.
- onDragDrop : 사용자가 다른곳에서 객체를 브라우저 안에 넣으려고 할 때 발생합니다. (IE 지원 불가)
- onError : 문서를 읽는 중에 에러가 생길 때 발생합니다.
- onMove : 브라우저의 위치를 변경했을 때 합니다. (IE 지원 불가)
- onResize : 창의 크기를 변경했을 때 합니다. (IE 지원 불가)

ㅇ Documents 객체

    브라우저의 내장 객체 중 window객체의 바로 하위에 존재하는 객체.
    - windows.document.~ 으로 표현하는 것이 정상이지만 보통은 window를 생략한다.

 

ㅇ history 객체

    브라우저 기록에 대한 정보를 가지고 있는 객체이다.

    - length    : 히스토리에 있는 URL의 개수
    - back()    : 히스토리 리스트에서 한 단계 뒤로 이동
    - forward() : 히스토리 리스트에서 한 단계 앞으로 이동
    - go()      : 히스토리 리스트에서 원하는 위치로 이동

<form>
  <input TYPE="button" value="이전으로"  onClick="history.back()">
  <input TYPE="button" value="다음으로"  onClick="history.forward()">
  <input TYPE="button" value="두단계 전으로"  onClick="history.go(-2)">
  <input TYPE="button" value="두단계 앞으로"  onClick="history.go(2)">
</form>

   

 

ㅇ location 객체
   현재 문서에 대한 정보를 가지고 있다.

 

속성
 href
 페이지의 URL주소
 host
 URL주소의 호스트이름과 포트번호
 hostname
 URL주소의 호스트이름
 protocol
 프로토콜
 pathname
 경로
 port
 포트번호
 hash
 레이블이름
 search
 호출시 사용하는 형식
메소드
 reload()
 현재 페이지를 다시 읽음
 replace()
 현재 페이지를 원하는 페이지로 바꿈

 

블로그 이미지

Link2Me

,
728x90

자바스크립트 기초

 

자바스크립트는 네스케이프社에서 개발한 HTML 문서 내에 삽입되어 동적인 웹페이지를 구현할 수 있는 스크립트이다.
독립된 응용프로그램의 형태를 지니지 못하는 스크립트 언어이다.
객체를 이용하여 프로그래밍하는 객체기반언어다.

 

자바스크립트는 웹 페이지의 HTML 엘리먼트에 DOM(document object model)이라는 좀 더 정형화되고, 구조화된 정의가 추가되면서 더욱 강력해졌다.
자바스크립트는 스크립트 언어의 특성 상 플랫폼에 독립적이며 모든 웹 브라우저에서 동일한 실행 결과를 얻을 수 있다.
프로그램 코드가 직접 html문서에 삽입되어, 브라우저에서 html파일을 읽을 때 같이 해석되고 실행된다.
컴파일 과정이 필요 없으며, 브라우저만 있다면 실행이 가능하다.
클라이언트에서만 실행되기에 정보를 서버에 보낼 필요 없이 처리할 수 있다.
소스 코드가 노출되어 누구든지 복사하여 사용할 수가 있다.

 

HTML안에 삽입 될 때는 <script> ~ </script>안에 정의한다.

<script> ~ </script>의 위치는
<head>~</head>태그 또는 <body>~</body>태그에 모두 정의 가능하다.

 

   - HTML 페이지의 <body> 태그 안을 자바스크립트에서는 document 라고 부른다.
   - 스크립트 실행문 document.write(); 부분의 document 를 객체(object)라고 부르고

     write() 는 '매서드(method)'라고 부른다.

   - 문장 끝에는 세미콜론';'을 적어서 문장의 끝을 알려주어라.
     자바스크립트에서는 새로운 줄이 세미콜론과 똑같이 동작하여 ';'를 붙이지 않아도 되기는 하다.
     하지만, 한줄에 하나 이상의 문장을 배치하려면 세미콜론 ';' 으로 나눠야 한다.
   - document.write(); 는 PHP의 echo 나 print 명령어와 같다.
     document.write("Hello World");

   <script type="text/javascript" src="node.js"></script>

   는 외부형 js 파일을 불러온다는 의미이다.

 

ㅇ 자바스크립트 주석문 : // 와 /* */
   // : 한 줄 주석 처리. 프로그램 코드 끝에 사용
   /* ~ */ : 한 줄 이상의 주석 처리
   HTML 주석 태크는 <!-- 내용입력 -->

 

ㅇ 문장 끝에는 세미콜론';'을 적어서 문장의 끝을 알려준다

ㅇ 변수 만드는 규칙
    - 사용 가능한 문자는 영문자, 숫자, _(underbar, underscore)이다

    - 숫자로 시작할 수 없다.

    - _(underbar , underscore)를 제외한 !, #, ?, $, @ 등과 같은 다른 특수문자는 올 수 없다.
   - 공백은 허용되지 않는다.
   - 자바스크립트 문법 안에서 규정한 예약어(키워드)는 변수로 사용할 수 없다.  

 

ㅇ 식별자 종류
   - 식별자 뒤에 괄호가 없고 단독으로 사용 : 변수
   - 식별자 뒤에 괄호가 있고 단독으로 사용 : 함수
   - 식별자 뒤에 괄호가 없고 다른 식별자와 사용 : 속성
   - 식별자 뒤에 괄호가 있고 다른 식별자와 사용 : 메서드

ㅇ 이용문법
   - \n : 줄바꿈
   - 문자열 연결은 + 를 사용 : '이런'+'식으로도'+' '+'출력 가능'
   - \t : Tab
   - \' : 작은 따옴표
   - \" : 큰 따옴표
   - \\ : 역슬레쉬(\)
   - %  : 나머지 연산자, alert(5 % 3);
   - 변수 : 값을 저장할 때 사용하는 식별자, 변수선언 var 식별자;

ㅇ 자료형 확인 : typeof 연산자를 이용
   <script>
     alert(typeof('String')); //String
     alert(typeof(123)); //Number
     alert(typeof(true)); //Boolean
     alert(typeof(function(){})); //Function
     alert(typeof({})); //Object
     alert(typeof(abc)); //Undefined : 선언되지 않은 변수를 출력하려고 할 때
                         // 변수를 선언했지만 초기화를 하지 않았을 경우에도 undefined 출력된다
   </script>

 

# null 은 의도해서 비워놓은 값

function getType(data) {
   return Object.prototype.toString.call(data).slice(8,-1);
}

console.log(getType(123));
console.log(getType(false));
console.log(getType(null));
console.log(getType({}));
console.log(getType([]));


ㅇ switch 문
   - 코드를 읽다가 break 를 만나게 되면  switch 문을 빠져 나가게 된다.

ㅇ 삼항 연산자
   - (불 표현식) ? (참일 때 실행되는 문장) : (거짓일 때 실행되는 문장)
   - 삼항연산자는 코드가 너무 복잡해지므로 한 줄로 적을 수 있을 때만 사용하는 것이 좋다.

 

반복문 : for, while, do ~while

ㅇ for 문 (For statement)
   for (초기식; 조건식; 종결식) { // 1. 먼저 초기식을 실행하고 조건식을 비교
      문장              // 2. 조건식이 참이면, 문장을 실행한 후 종결식을 실행하고
   }                  // 3. 다시 조건식을 비교하고, 참이면 문장실행후 종결식을 실행(반복)
   continue;  // continue를 만나면 continue 이전 까지의 문장만이 실행이 되고 다음 반복으로 넘어감

 

ㅇ while 문
   while (불 표현식) {  // 불 표현식이 참인 동안 수행문을 실행하고, 거짓이면 수행문을 실행하지 않는다.
     수행문 ...
   }

 

ㅇ do while 문
   do {
      문장
   } while (불 표현식)  // 무조건 한번 실행 후 반복

 

 

변수 유효범위(Variable Scope)

형변환(Type conversion)
=== 일치연산자
== 동등연산자 : 형변환이 발생한다.

Falsy(거짓 같은 값)
false, '', null, undefined, 0, -0, NaN
1 + undefined  ==> NaN

 

ㅇ 배열

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

     <script>
         var lls = document.getElementsByTagName('li');
         for(var i in lls){
             lls[i].style.color = 'blue';
        }
     </script>  

   - 배열 함수 정리 자료는 http://link2me.tistory.com/1458 참조

 

ㅇ 함수
함수란, 미리 만들어 놓은 작은 프로그램으로 혼자서는 실행되지 않고 다른 함수에 의해서 호출(call)을 받아야만 실행 될 수 있는 프로그램

   function 함수이름(매개변수, 매개변수) {
    함수의 수행문 ...
    return 리턴값;
   }

 

내장함수

alert : 가장 많이 사용되는 자바스크립트 메세지창이다.

prompt : 사용자의 입력을 받아 자바스크립트로 인식시킬때 사용하는 내장함수이다.

confirm : 확인과 취소 버튼을 가지는 메세지상자이다.

<script>
  var res;
  res = confirm("계속하겠습니까?");
  if (res == true)
    document.write("진행을 선택했습니다");
  else
    document.write("취소 되었습니다.");
</script>

 


ㅇ Example
   alert(1000 > 100 > 10);
    해설 : 연산 과정은 좌측부터 계산하며, alert(true > 10) -> alert(1 > 10) -> alert(false)
   alert(num++) 은 alert(num); num=num+1;
   alert(++num) 은 num=num+1; alert(num);
   문자열을 입력하는 함수인 prompt()
   var input = prompt('이름을 입력하세요.', '홍길동');alert(input);
   confirm()함수는 사용자가 확인을 누르게 되면 true, 취소를 누르면 false를 리턴한다.
   var input = confirm('수락하시겠습니까?');alert(input);

 

ㅇ 알아두면 좋은 팁

    - window.open 을 클릭으로 열면 팝업이 차단되지 않지만, 그냥 열면 기본은 차단된다.

      <script>
         window.open('demo2.html');
      </script>

    - window.open('test1.html', '_blank', 'width=200, height=100, resizable=yes');

블로그 이미지

Link2Me

,