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 해 주세요.

728x90
블로그 이미지

Link2Me

,