<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Form - Value Control</title>
<script src="../jquery-3.7.1.js"></script>
<script type='text/javascript'>
$().ready(function(){
//--------------------------------라디오 선택 변경
$("#change_radio").click(function(){
$(".age").first().prop("checked", true)
} )
//--------------------------------체크박스 모두 해제
$("#release_checkbox").click(function(){
$(".hobby").prop("checked",false)
})
//--------------------------------체크박스 모두 선택
$("#check_checkbox").click(function(){
$(".hobby").prop("checked",true)
})
//--------------------------------체크박스 선택변경
$("#change_checkbox").click(function(){
$(".hobby") //클래스가 하비인것중
.first() // 첫번째 아이템을 가져와서
.prop("checked", true)// 선택 상태를 변경한다.
})
//--------------------------------값 변경
$("#change_value").click(function(){
// checkbox와 radio는 값 변경을 해서는 안된다.
// 값 변경 대신, 선택의 상태를 변경해야한다.
// 다음파트에서 다룹니다.~
$("#email").val("기본값 이메일")
$(".body").val("내용을 입력해야 합니다.")
//select의 값 변경을 할 떄엔
//select 하위의 option value중 하나를 입력해야 합니다.
//option에 존재하지 않는 갑을 입력할 경우
//select는 아무것도 선택되지 않는 상태로 바뀝니다.
$("#email_domain").val("@google.com")
})
//--------------------------------값 확인
$("#check_value").click(function(){
var hobby=[]
var email=$("#email").val()
$(".hobby:checked").each(function(i,elem){
// console.log(i,$(elem))
hobby.push($(elem).val())
})
var age=$(".age").val()
var body=$(".body").val()
var emailDomain=$("#email_domain").val()
console.log("email", email)
//checkbox나 radio는 :checked로 선택된 값을 가져와야한다.
console.log("hobby:checked", hobby)
console.log("age:checked", age)
console.log("body", body)
console.log("email_domain", emailDomain)
})
})
</script>
</head>
<body>
<input type="text" id="email"/>
<!-- checkbox와 radio는 name, value가 반드시 필요하다 -->
<input type="checkbox" class="hobby" name="hobby" value="1" checked/>
<input type="checkbox" class="hobby" name="hobby" value="2"/>
<input type="checkbox" class="hobby" name="hobby" value="3"/>
<input type="checkbox" class="hobby" name="hobby" value="4"/>
<input type="radio" class="age" name="age" value="10" checked> <!-- checked를 붙이면 젤 첫번째가 체크되어서 나온다.-->
<input type="radio" class="age" name="age" value="20">
<input type="radio" class="age" name="age" value="30">
<input type="radio" class="age" name="age" value="40">
<textarea class="body"></textarea>
<select id="email_domain" >
<option value="@naver.com">Naver</option>
<option value="@daum.net">Daum</option>
<option value="@google.com" selected>Google</option> <!--selected를 사용하면 화면에 젤 먼저 나온다.-->
<option value="@nate.com">Nate</option>
</select>
<div>
<button id="check_value">값 확인</button>
<button id="change_value">값 변경 </button>
<button id="change_checkbox">체크박스 선택 변경 </button>
<button id="check_checkbox">체크박스 모두 선택 </button>
<button id="release_checkbox">체크박스 모두 해제 </button>
<button id="change_radio">라디오 선택 변경 </button>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style type='text/css'>
body{
background-color: #EEE;
margin: 0px;
}
*{
color:#333
}
#wrapper{
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
#wrapper>div:first-child{
border: 1px solid #666;
border-radius: 5px;
background-color: #FFF;
width: 500px;
}
#wrapper .flex{
width: 20px;
display: flex;
align-items: stretch;
}
#wrapper .grid{ /*password id 글자수가 달라서 위치 맞추기*/
display: grid;
grid-template-columns: 150px 1fr;
grid-template-rows: 40px;
}
#wrapper label{
padding: 10px;
font-size: 11pt;
}
#wrapper input{
border: 0px;
background-color: transparent; /*배경색 투명*/
outline: 0px;
border-radius: 5px;
}
#wrapper input.error{
border: 2px solid #d90202;
color: #d90202;
}
#wrapper input:focus{
border: 2px solid #02d902;
}
#wrapper > .btn_group{
width: 500px;
margin-top: 10px;
}
#wrapper > .btn_group button{
padding: 5px;
background-color: #3939ffCC;
border: 0px;
color: #FFF;
border-radius: 5px;
}
#wrapper >.align_right{
text-align: right;
}
</style>
<script src="../jquery-3.7.1.js"></script>
<script type='text/javascript'>
$().ready(function(){
//focus가 뻇기는 이벤트 :blur
$("input").blur(function(){
var id=$(this).val().trim()
$(this).val(id)
if(id == ""){
$(this).addClass("error")
}else{
$(this).removeClass("error")
}
})
-----------------------------------------------------------------------------------------------------------------
입력한 글자수를 채운뒤 지정한 다음으로 자동으로 넘어가기
$("input[data-move-element=true]").keyup(function(){
var maxlength=$(this).attr("maxlength"); // html에서 설정했던 maxlength를 jquery에서 가져온다.(attr)
var inputSize =$(this).val().length
if(maxlength==inputSize){
var nextElement = $(this).data("next-element")
$(nextElement).focus() // 글자가 채워지는 순간 다음으로 넘어간다
}
}) // data-move-element="true"
// data-next-element="#sex_code"에서 가져온거
----------------------------------------------------------------------------------------------------------------
주민번호가 1,3이면 남자로 자동체크 2,4면 여자로 자동체크
$("#sex_code").keyup(function(){
var code = $(this).val()
var arr = [undefined, // 0번 인덱스
"#sex_male", // 1번
"#sex_female", // 2번
"#sex_male", // 3번
"#sex_female"] // 4번
$(arr[code]).prop("checked", true) // 체크박스 변경 이벤트는 prop
})
----------------------------------------------------------------------------------------------------------
패스워드 일치 확인
$("input[data-compare=true]").keyup(function(){
var text=$(this).val()
console.log(text)
var otherElement = $(this).data("compare-element")
var otherText=$(otherElement).val()
if(text != otherText){
$(this).addClass("error")
$(otherElement).addClass("error")
}else{
$(this).removeClass("error")
$(otherElement).removeClass("error")
}
}) // password_confirm도 똑같이 해줘야하는데 두개가 나와서 중복이 된다 그래서 data를 써서 중복을 제거한다.
-------------------------------------------------------------------------------------------------------------------
숫자만 입력했을때 나오는 방법
$("input[data-numeric-field=true]").keydown(function(event){ //event를 받아와야 어떤 키를 눌렀는지 알 수 있다.
console.log(event.key, event.keyCode)
var availablekeyCode=",8,13,116,37,38,39,40,46,18," //방향키, 백스페이스같은 필요한 기능
var keyCode="," + event.keyCode + ","
var isNotAvailablekeyCode = availablekeyCode.indexOf(keyCode) == -1
if(isNotAvailablekeyCode && isNaN(event.key)){
return false;
}
}
-----------------------------------------------------------------------------------------------------------------
$("#submit_btn").click(function() {
$("#regist_form").submit()
})
})
</script>
</head>
<body>
<div id="wrapper">
<div>
<div class="grid">
<label for="id">ID</label>
<input type="text" id="id"
name="userId"
placeholder="ID를 입력하세요"
autocomplete="off"/>
</div>
<div class="grid">
<label for="password">Password</label>
<input type="password"
id="password"
name="password"
placeholder="비밀번호를 입력하세요"
autocomplete="off"
data-compare="true"
data-compare-element="#password_confirm"/>
</div>
<div class="grid">
<label for="password_confirm">Password</label>
<input type="password"
id="password_confirm"
name="password_confirm"
placeholder="비밀번호를 다시 입력하세요"
autocomplete="off"
data-compare="true"
data-compare-element="#password"/>
</div>
<div class="grid">
<label for="birth_date">주민번호 7자리</label>
<div class="flex">
<input type="text" id="birth_date" name="birth_date" placeholder=" 900101"
maxlength="6"
data-numeric-field="true"
data-move-element="true"
data-next-element="#sex_code"
style="width: 80px;" autocomplete="off"/>
<div style="align-self: center;" >-</div>
<input type="text"
id="sex_code"
name="sex_code"
placeholder="1"
autocomplete="off"
style="width: 20px;"
maxlength="1"
data-numeric-field="true"/>
<div style="align-self: center;" >******</div>
</div>
</div>
<div class="grid">
<label for="sex_male">성별</label>
<div class="flex">
<label for="sex_male">남</label>
<input type="radio" id="sex_male" name="sex" value="male"/>
<label for="sex_female">여</label>
<input type="radio" id="sex_female" name="sex" value="female"/>
</div>
</div>
<div class="grid">
<label for="name">이름</label>
<input type="text"
id="id"
name="name"
placeholder="이름을 입력하세요"
autocomplete="off"/>
</div>
<div class="grid">
<label for="tell">휴대전화 번호</label>
<input type="tel"
id="tel"
name="tel"
placeholder="휴대전화 번호를 입력하세요"
autocomplete="off"
data-numeric-field="true"/>
</div>
</div>
<div class="btn_group align_right">
<button>가입</button>
</div>
</div>
</body>
</html>
주의할점: form태그 내에 새로운 form태그를 중첩해서 사용할 수 없다
ajax 호출할때 get=조회 post=생성의 뜻을 가지고 있지만
form(데이터 전송 방법을 가지고있다)
같은 보내주는 역활인데 왜 구분이 되어있을까?
get방식(?뒤에)
action?
민감한 정보를 보낼떄는 get으로 보내면 안된다 (누구나 볼 수 있기 때문에)