채택완료

폼제출 하고 input값이 초기화 안되는 방법 있나요?

폼 입력 후 약관동의하지 않음을 선택하면 '약관을 동의해주세요'라는 알림이 뜨게 설정해놨는데

그 후에 폼에 입력해놓은 값들이 초기화되서 없어져 버립니다 ㅠ

 

폼 제출 전에는 입력해놓은 값들은 유지하는 방법 있을까요?

|

답변 6개 / 댓글 1개

채택된 답변
+20 포인트

데이터 형태가 어떠한 형태인지 알수가 없어서

기본적은 form & submit 형태로 알려드립니다.

 

Copy
<form name="form" onsubmit="return check()">
   <input type="text" name="id">
   <input type="text" name="pw">
   <input type="submit">
</form>
 
<script>
function check() {
  if(form.id.value == "") {
    alert("ID를 입력해주세요.");
    form.id.focus();
    return false;
  } else if(form.pw.value == "") {
    alert("PASSWORD를 입력해 주세요.");
    form.pw.focus();
    return false;
  } else return true;
}
</script>

 

문의주신 내용은 팁게에도 등록했습니다~

https://sir.kr/g5_tip/19882

답변에 대한 댓글 1개

<div class="cont-radio">
<input
type="radio"
name="wr_1"
value="1"
<?if($write[wr_1]=="1")echo"checked";?>> 모두 동의 
<input
type="radio"
name="wr_1"
value="0"
<?if($write[wr_1]=="0")echo"checked";?>> 동의하지 않음
</div>
<div class="btn_confirm">
<input
type="submit"
value="작성완료"
id="btn_submit"
accesskey="s"
class="btn_submit">
<a href="javascript:history.back();" class="btn_cancel">취소</a>
</div>

와 write_update.head.skin.php파일에
<?
if (!defined("_GNUBOARD_")) return; // 개별 페이지 접근 불가
if ($wr_1 == 0) {
alert('약관에 동의해 주세요.');
}
?>
를 추가해서 쓰고 있습니다.

--------------------------
적어주신 대로 수정 해보면
<script>
function check() {
if(form.wr_1.value == "") {
alert("약관에 동의해주세요");
form.wr_1.focus();
return false;
} else return true;
}
</script>
이렇게 쓰면 될까요??

다른분들이 html형태로 쉽게 잘 설명해주셨는데요

php로 해보면 이용약관 값을 post나 get 등으로 받아서 체크해보는 방법도 있을수 있을것 같네요

이용약관 체크했는지 여부 변수를 a라고 한다면 값을 chk로 받아서 비교하는 방법으로 하면될것 같네요

<input type="checkbox" name="term" value="Y" <?=($a=="chk"?"checked":"")?>>

 

이런식으로 쓸수 있겠네요

 

 

onsubmit 이벤트 핸들러에 대해

return 처리가 제대로 되지 않았거나 에러가 발생해서 

그대로 서브밋 되었을 가능성이 있을것으로 유추됩니다.

 

케이스별 상황의 예시가 도움이 될지 모르겠습니다.

 

Copy
<script>
function fsubmit_err_0(fobj) {
    if (fobj.chk.checked == false) {
        alert('약관을 동의해주세요');
    }
    // no return
}

 

function fsubmit_err_1(fobj) {
    if (fobj.chk.checked == false) {
        alert('약관을 동의해주세요');
        fobj.not_exists_elements.focus(); // error. not exists element
        return false;
    }
    return true;
}

 

function fsubmit(fobj) {
    if (fobj.chk.checked == false) {
        alert('약관을 동의해주세요');
        return false;
    }
    return true;
}
</script>

 

<form method="post" onsubmit="return fsubmit_err_0(this)">
<fieldset>
    <legend><h2>Submit Error</h2> by no return statement</legend>
    <ul>
        <li><label>a : <input name="a" type="text" /></label></li>
        <li><label>b : <input name="b" type="text" /></label></li>
        <li><label><input name="chk" type="checkbox" /> 약관을 동의</label></li>
        <li><input type="submit" /></li>
    </ul>
</fieldset>
</form>

 

<form method="post" onsubmit="return fsubmit_err_1(this)">
<fieldset>
    <legend><h2>Submit Error</h2> by not exists element</legend>
    <ul>
        <li><label>a : <input name="a" type="text" /></label></li>
        <li><label>b : <input name="b" type="text" /></label></li>
        <li><label><input name="chk" type="checkbox" /> 약관을 동의</label></li>
        <li><input type="submit" /></li>
    </ul>
</fieldset>
</form>

 

<form method="post" onsubmit="return fsubmit(this)">
<fieldset>
    <legend><h2>Submit normal</h2></legend>
    <ul>
        <li><label>a : <input name="a" type="text" /></label></li>
        <li><label>b : <input name="b" type="text" /></label></li>
        <li><label><input name="chk" type="checkbox" /> 약관을 동의</label></li>
        <li><input type="submit" /></li>
    </ul>
</fieldset>
</form>

추가로 단지 채크 유무만 판별하실거면

<input type="checkbox" required>

이렇게 checkbox 에도 필수입력 할당이 가능합니다.

단, ie11 이하 구버전 브라우저에서는 작동하지 않을 수 있습니다.

ajax로 하시면 원하시는데로 처리가 될거 같습니다. 통신이 제대로 되면 폼을 초기화 하시고요.

세션이나 쿠키를 이용해보세요.

답변을 작성하려면 로그인이 필요합니다.