重看Javascript高级程序设计,第14章:表单脚本

本文深入探讨了JavaScript中HTMLFormElement的属性与方法,包括如何获取表单及控件,处理表单事件,以及如何操作Select元素,如添加、删除选项,处理选择事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//js中表单对应的是HTMLFormElement.继承自HTMLElement,自己独有的属性如下
			//acceptCharset 		服务器能够处理的字符集,等价于HTML中的accept-charset特性.
			//action				接收请求的url,等价于HTML中的action特性.
			//elements				表单中所有控件的集合
			//enctype				请求的编码类型,等价于HTML中的enctype
			//length				表单中控件的数量
			//method				要发送的HTTP请求类型,通常是"get"或"post",等价于HTML的method特性.
			//name 					表单的名称.
			//reset 				将所有表单域重置为默认值.
			//submit				提交表单
			//target				用于发送和接收响应的窗口名称;等价于HTML的target特性.
			
			//取得form的方法:
			var form = document.getElementById('form1')
			console.log(form)
			//forms	
			var form1 = document.forms[0]
			var form2 = document.forms['formname2']
			console.log(form1)
			console.log(form2)
			
			//发送服务器之前会触发submit事件.阻止这个默认行为就可以取消表单提交.如下:
			// form.onclick = function(e){
			// 	e.preventDefault()
			// }
			
			//提交表单
			// form.submit()
			
			//重置表单
			// form.reset()
			
			//取得表单控件
			console.log(form.elements)
			console.log(form.elements['btn'])
			console.log(form.elements.length)
			
			//共享表单字段属性
			form.elements[0].value = "我是修改的值"
			console.log(form.elements[0].form === form)
			form.elements[0].focus()
			// form.elements[0].disabled = true
			
			form.onsubmit = function(e){
				console.log(e)
				// var btn = form.elements['btn1']
				// btn.disabled = true
			}
			
			//共有的表单字段方法
			//focus和blur	
			//focus用于将浏览器焦点设置到表单字段.如下:
			// window.onload = function(e){
			// 	form.elements[0].focus()
			// }
			//blur 从元素中移走焦点
			// console.log(form.elements[0].blur())
			// //change		对于input和textarea,失去焦点并且value值改变时触发
			// form.elements[0].onchange = function(){
			// 	console.log('改变')
			// }
			form.onfocus = function(e){
				if(e.target.style.backgroundColor != "red"){
					e.target.style.backgroundColor = "yellow"
				}
			}
			
			form.onblur = function(e){
				if(/[^d]/.test(e.target.value)){
					e.target.style.backgroundColor = "red"
				}else{
					e.target.style.backgroundColor = ""
				}
			}
			form.onchange = function(e){
				if(/[^d]/.test(e.target.value)){
					e.target.style.backgroundColor = "red"
				}else{
					e.target.style.backgroundColor = ""
				}
			}

// var select = document.getElementById('select')
			// select.onselect = function(e){
			// 	console.log(e.target)
			// }
			
			// function g(txt){
			// 	return txt.value.substring(txt.selectionStart,txt.selectionEnd)
			// }
			// console.log(g(select))
			// 
			//自动切换焦点
			
			(function(){
				function tabjd(e){
					var target = e.target
					if(target.value.length == target.maxLength){
						var form = target.form
						for(var i = 0,len = form.elements.length;i<len;i++){
							if(form.elements[i] == target){
								if(form.elements[i+1]){
									form.elements[i+1].focus()
								}
								return
							}
						}
					}
				}
				var t1 = document.getElementById('txt1')
				var t2 = document.getElementById('txt2')
				var t3 = document.getElementById('txt3')
				t1.onkeyup = function(e){
					tabjd(e)
				}
				t2.onkeyup = function(e){
					tabjd(e)
				}
				t3.onkeyup = function(e){
					tabjd(e)
				}
			})()
			var btn = document.getElementById('btnnn')
			btn.onclick = function(){
				console.log(document.forms[0].checkValidity())
			}
<form action="" method="post" id="f1" name="f1">
			<select name="s1" id="s1">
				<option value="o1">我是值1</option>
				<option value="o2">我是值2</option>
				<option value="o3">我是值3</option>
				<option value="o4">我是值4</option>
				<option value="o5">我是值5</option>
			</select>
			<input type="submit" value=""/>
		</form>
		<script>
			var s1 = document.forms[0].elements["s1"]
			console.log(s1.options[0].value)
			console.log(s1.options[0].text)
			s1.onchange = function(){
				console.log(s1.value)
				console.log(s1.options[s1.selectedIndex])
				console.log(s1.selectedIndex,s1.options[s1.selectedIndex].text,s1.options[s1.selectedIndex].value)
				var l = g(s1);
				var message = ''
				for(var i = 0,len = l.length;i<len;i++){
					message += 'index为:' + l[i].index + 'text为:' + l[i].text + '值为:' + l[i].value
				}
				alert(message)
			}
			
			//将选择的值添加到数组中
			function g(select){
				var result = new Array()
				var option = null;
				for(var i = 0,len = select.length;i<len;i++){
					option = select.options[i]
					if(option.selected){
						result.push(option)
					}
				}
				return result 
			}
			console.log()
			
			//添加选项
			var newOption = document.createElement('option')
			newOption.appendChild(document.createTextNode("新文档"))
			newOption.setAttribute('value','o0')
			s1.appendChild(newOption)
			
			//第二种方式添加选项
			var d2 = new Option('新文档2','o00')
			s1.appendChild(d2)
			
			//第三种方式添加选项
			var d3 = new Option('新文档3','o01')
			s1.add(d3,null)
			
			//移除选项
			s1.removeChild(s1.options[0])
			
			//第二种
			s1.remove(0)
			
			//第三种
			s1.options[0] = null
			
			//清除所有
			// for(var i = 0,len=s1.options.length;i<len;i++){
			// 	s1.remove(i)
			// }
			
			//移动和重拍位置
			//将第一个选项移除第二个选项中
			// var y1 = document.getElementById('y1')
			// var y2 = document.getElementById('y2')
			// y2.appendChild(y1.options[0])
			
			//移动位置
			var y3 = s1.options[1]
			var y4 = s1.options[3]
			//向前移动一个
			s1.insertBefore(y3,s1.options[y3.index - 1])
			//向后移动2个
			s1.insertBefore(y4,s1.options[y4.index + 2])
		</script>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值