JS
JS 02/28
SangssI
2023. 3. 1. 18:41
자바스크립트와 HTML의 연동
1. js_method.html : 자바스크립트를 이용한 함수 만들기
JS 코드
<script>
let aa = "결과: "; /* 일반적인 전역변수 설정은 문제가 되지 않는다 */
/*let a2 = document.getElementById("res2");*/ // 태그를 검색하는 코드는 '절대' 전역으로 지정할 수 없다.
function test1() { /* 자바 스크립트의 함수, 반환형을 가지고 있지 않음 */
/* function 키워드로 시작하는 js의 메서드는 반환형을 가지고 있지 않다 */
let res = document.getElementById('res2'); // id가 res2인 요소의 정보를 res에 저장하여 객체의 속성 변경 가능
alert(aa + res.value); // 전역변수 aa와 res.value의 값을 받아 경고창의 메시지 출력
}
function test2(n) {
//js의 메서드는 파라미터 타입을 따로 지정하지 않는다
//alert(n);
//id가 res1인 객체를 검색
let res = document.getElementById('res1');
res.value = n;
}
function test3() {
let h_tag = document.getElementById('h'); // h1태그의 id인 h의 요소의 정보를 h_tag에 저장하여 h1태그에 내용추가
h_tag.textContent = '반갑습니다.'; // <h1>반갑습니다.</h1> 이러한 형태로 만들어 주는 메서드. innerHTML은 보안에 취약하여 textContent를 사용하지만 추가적인 태그를 넣기 위해선 innerHTML을 사용하여야 함
}
</script>
HTML 코드
<body>
<!-- value는 text상자의 값이 저장됨, placeholder : 커서를 놓으면 사라지는 텍스트 -->
<!--input태그 : 사용자로부터 정보를 받기 위한 태그 이며 여러 종류가 있다.-->
<input id="res1" type="text" value="" placeholder="이름을 입력하세요"><br> // id 지정
<input id="res2" placeholder="값을 넣는 가이드라인"><br> <!-- type="text"속성이 없으면 일반적인 입력상자가 된다-->
<!-- 버튼1을 클릭하면 test1()메서드가 호출된다 -->
<input type="button" value="버튼1" onclick="test1();"> //onclick 속성을 통해 자바스크립트의 함수를 지정
<input type="button" value="버튼2" onclick="test2('안녕');"> // 자바스크립트 함수에 '안녕'이라는 문자열 매개변수 전달
<input type="button" value="버튼3" onclick="test3();">
<h1 id="h">안녕하세요</h1>
</body>
2. js_gallery.html : 자바스크립트를 이용한 간단한 사진첩 만들기
JS코드
<script>
let num = 1; //전역변수
let path = "image/img"; // 전역변수
function next() {
num++;
if( num == 8 ){
num = 1;
}
//gallery라는 id를 가진 요소로 접근하여 src경로를 변경
document.getElementById('gallery').src = path + num + ".jpg";
}
function prev() {
num--;
if( num == 0 ){
num = 7;
}
//gallery라는 id를 가진 요소로 접근하여 src경로를 변경
let gallery = document.getElementById('gallery');
gallery.src = path + num + ".jpg";
}
</script>
HTML코드
<body>
<div>
<a href="#" onclick="prev()";>
<img src="image/left_btn.png">
</a>
<a>
<img id="gallery" src="image/img1.jpg" width="300" height="150">
</a>
<a href="#" onclick="next()";>
<img src="image/right_btn.png">
</a>
</div>
</body>
3. js_gugudan.html : 자바스크립트를 이용한 간단한 구구단 만들기
CSS코드
<style>
hr { width: 300px;
margin: 10px 0;
border: aquamarine 5px ridge;}
#disp { width: 300px;
height: 300px;
background: black;
color: white;
text-align: center;
font: 20px none sans-serif;
}
</style>
JS코드
<script>
function start() {
let dan = document.getElementById("dan").value;
//input의 value는 기본적으로 문자열 구조이므로 +를 사용하면 이어붙어서 표기된다.
//단 -,/,*,>,< 등은 따로 Number()형태로 변환하지 않아도 연산이 가능
//유효성 체크(무결성 체크)
//정규식 사용
let num_check = /^[0-9]+$/;
if ( !num_check.test(dan) ) {
alert("2 ~ 9 사이의 값만 입력하세요");
return; // 아래의 코드를 실행하지 않고 다시 함수를 실행
}
/* if( dan.trim() == ''){
alert("값을 입력해야 합니다");
return; // 아래의 코드를 실행하지 않고 다시 함수를 실행
} */
if( dan.trim() < 2 || dan.trim() > 9) {
alert("2 ~ 9 사이의 값을 입력하세요");
return; // 아래의 코드를 실행하지 않고 다시 함수를 실행 Ex) 10단을 입력하고 경고창이 뜬 후 구구단이 출력되지 않아야 함
}
//구구단 생성
let str = "";
for (let i=1; i<10; i++) {
str += dan + " * " + i + " = " + (dan * i) + "<br>";
}
let div = document.getElementById('disp');
div.innerHTML = str;
}
let b_show = true;
function show() {
b_show = !b_show;
let btn = document.getElementById('btn_show');
b_show ? btn.value = "숨기기" : btn.value = "보이기";
//div 검색 및 숨기기 처리
let div = document.getElementById("disp");
b_show ? div.style.display = 'block' : div.style.display = 'none' // style속성의 display를 이용
}
</script>
HTML코드
<body>
<div>
단 : <input id="dan">
<input type="button" value="결과보기" onclick="start();">
<input type="button" value="숨기기" id="btn_show" onclick="show();">
</div>
<hr>
<div id="disp"></div>
</body>
4. form태그.html : HTML에서의 form태그와 자바스크립트의 파라미터 전달
JS코드
<script>
function check1() {
//f1이라는 id를가진 form태그를 검색
let f = document.getElementById("f1");
//검색한 form태그인 f를 통해 id,pwd,age라는 name속성을 가진 태그로 접근
//form태그를 이용하면 id가 아닌 name을 통해 form의 내부 태그들의 요소의 정보에 접근이 가능
// document.getElementById("");를 이용하지 않아도 바로 접근이 가능하다
let id = f.id.value; //form태그 내부의 name = "id"인 요소의 value
let pwd = f.pwd.value; //form태그 내부의 name = "pwd"인 요소의 value
let age = f.age.value; //form태그 내부의 name = "age"인 요소의 value
//유효성 체크
if( id == '' ) {
alert("아이디는 반드시 입력해야 합니다.");
return;
}
if( pwd == '' ){
alert("비밀번호는 필수입니다.");
return;
}
let age_check = /^[0-9]+$/;
if ( !age_check.test(age) ) {
alert("나이는 정수로 입력하세요");
return;
}
//전송방식
// get : 파라미터를 url에 노출, 보안성이 떨어지지만 속도가 빠른 편
// post : 파라미터가 url에 노출되지 않음. 속도가 느린편이지만 보안성이 높아진다.
f.method = "post";
f.action = "login.jsp"; // login.jsp의 페이지로 이동하면서 form태그의 name으로 지정된 속성들만(파라미터)를 같이 전달한다.
// id의 value는 넘어가지 않는다.
//입력된 데이터(form안에 name으로 설정된 요소)을 서버측(외부)으로 전송 // 파라미터로 만들기위한 이동장치
f.submit(); //http://localhost:63342/pss_html/Ex_0228/login.jsp?id=123&pwd=14124&age=1515 홈페이지의 파라미터에 name으로 설정된 값을 전송
} //check1()
function check2() {
//name이 fff로 지정되어 있는 form태그 가져오기
let f = document.getElementsByName('fff'); // getElementsByName은 'fff' name을 가지는 요소를
//배열형태로 반환
alert(f.length); // f배열의 길이를 확인하기 위한 경고창 결과 : 1
let id = f[0].id.value; // 'fff'을 name으로 가지는 요소는 form 하나이므로 f[0]을 통해 접근
let pwd = f[0].pwd.value;
//유효성 체크 했다치고
// f.method = "get";
// f.action = "login.jsp";
f[0].submit();
} //check2()
</script>
HTML 코드
<body>
<!-- 서버로 값을 전송하기 위해 데이터를 스크립트 영역으로 옮겨주기 위한 태그 -->
<form id="f1">
<table border="1">
<tr>
<th>아이디</th>
<!-- name 속성은 id와 비슷하지만, input,textArea태그등의 정해진
일부 태그에서만 사용이 가능하며, form태그 밖에서 name속성을 정의하는 것은 의미가 없다! -->
<td><input name="id"></td>
</tr>
<tr>
<th>비밀번호</th>
<!-- name 속성은 id와 비슷하지만, input,textArea태그에서만 사용이 가능-->
<td><input type="password" name="pwd"></td>
</tr>
<tr>
<th>나이</th>
<!-- name 속성은 id와 비슷하지만, input,textArea태그에서만 사용이 가능-->
<td><input name="age"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="button" value="폼체크1" onclick="check1();">
</td>
</tr>
</table>
</form>
<hr>
<form name="fff" method="get" action="login.jsp">
id : <input name = "id"><br>
pwd : <input name = "pwd"><br>
<input type="button" value="폼체크2" onclick="check2();">
</form>
<hr>
</body>