js Event事件 change submit reset select resize scroll load unload error

前言

javascript 中事件分类有:MouseEvent(鼠标事件)、Event对象、FocusEvent对象、InputEvent (input事件)、KeyboardEvent(键盘事件)、WheelEvent (滚轮事件)。
各个事件中具备自身独立的属性,比如clientX、clientY只属于mouseEvent;keyCode只属于KeyboardEvent等。
Event称为事件基类,基类的属性是最少的。

Event事件的类别有以下:

  1. change 修改事件
  2. submit 提交事件
  3. reset 重设事件
  4. select 选择文字事件
  5. resize 重新修改大小事件
  6. scroll 滚动条事件
  7. load 加载事件
  8. unload 卸载事件
  9. error 错误事件

change 修改事件

change 是修改事件,主要用于表单元素,当表单元素被修改时,失去焦点时才会触发事件

input 的 change 事件:只有当 input 的 value 有修改时,才会触发事件

<input type="text" id="user" name="user">
<script>
var user=document.getElementById("user");
user.addEventListener("change",changeHandler);
function changeHandler(e){
	console.log(e);
}
</script>

select 的 change 事件:

当 select 为多选时,可以用下面这两个属性来获取被选中的值,

  • selectedIndex 下拉菜单被选中的索引值
  • selectedOptions 下拉菜单中被选的option标签列表
<!--multiple 设置select多选-->
<select id="city" name="city" multiple>
    <option>北京</option>
    <option>西安</option>
    <option>上海</option>
</select>
<script>
var city=document.getElementById("city");
city.addEventListener("change",changeHandler);
function changeHandler(e){
	console.log(this.selectedIndex);//获得被选中的索引值
	console.log(this.selectedOptions);//获得被选的option标签列表
}
</script>

当 select 为多选时,向后台提交数据,会看到请求数据中 city 被传了两个值,这样传参是不正确的,我们可以在提交表单的时候,将 select 的值合并一下。
select 多选传参
去掉 select 的 name 属性,同时在页面中放入一个隐藏的 input,name 为 citySelect,将 select 被选中的值以符号分隔传给 input。

<input type="text" name="citySelect" id="citySelect">
<select id="city"  multiple>
    <option>北京</option>
    <option>西安</option>
    <option>上海</option>
</select>
<script>
var city=document.getElementById("city");
var citySelect=document.getElementById("citySelect");
city.addEventListener("change",changeHandler);
function changeHandler(e){
	var selectStr=Array.from(this.selectedOptions).reduce(function(value,item){
								return value+(value.length===0 ? "" :",")+item.textContent;
           				 },"");
	citySelect.value=selectStr;
}

</script>

提交表单后,就可以看到数据可以正确传递了
select 多选传参

submit 提交事件、reset 重设事件

  • submit 和 reset,表单的事件类型,只能作用于form元素
  • 当给 form 侦听 submit 事件后,点击 form 里的 button 按钮或者 submit 按钮,都会触发 submit 提交事件。
  • 提交submit时,没有name的表单不会被提交
<form action="#" method="GET">
<input type="text" id="user" name="user">
</form>
<script>
var form=document.querySelector("form");
var user=document.getElementById("user");
form.addEventListener("submit",submitHandler);
form.addEventListener("reset",resetHandler);
function submitHandler(e){
	//提交处理
}           
function resetHandler(e){
	//重置
}
</script>

select 选择文字事件

select 文本选择事件,主要针对于 input 或者 textArea 中的文本选择,与下拉菜单没有关系,主要是选择文本框中的文本内容时触发事件。

可以用 input 的以下属性来获取选中的值:

  • selectionStart 选中值的开始位置下标
  • selectionEnd 选中值的结束位置下标
  • selectionDirection 有两个值:forward为从左到右选择、backward为从右到左选择
<input type="text" id="user" name="user">
<script>
var user=document.getElementById("user");
user.addEventListener("select",selectHandler);
function selectHandler(e){
    console.log(user.selectionStart);//开始位置的索引
    console.log(user.selectionEnd);//结束位置的索引
    console.log(user.selectionDirection);//选择的方向        
}
</script>

案例:将 input 或者 textarea 中选中的小写字母改成大写字母

//接上一段代码
function selectHandler(e){
	user.value=user.value.slice(0,user.selectionStart)+user.value.slice(user.selectionStart,user.selectionEnd).toUpperCase()+user.value.slice(user.selectionEnd)
}

resize 重新修改大小事件

resize 重新修改大小事件,主要针对window事件,作用于window,窗口被改变大小时事件被触发

案例:当窗口改变时,将 html 字体大小成比例缩小:

 window.addEventListener("resize",resizeHandler);
function resizeHandler(e){
    var scale=document.documentElement.clientWidth/screen.width;
    document.documentElement.style.fontSize=100*scale+"px";
}

scroll 滚动条事件

scroll 滚动事件,可以针对任何具备滚动条的容器进行侦听。

注意:

  • 滚轮滚动不是滚动事件触发的方式,滚轮滚动改变了滚动条的位置,才会触发滚动事件。滚轮滚动属于间接触发滚动条事件
  • 只有滚动条位置的改变才能触发滚动事件
  • 如果要设置flash中的滚动条不改变外部的滚动条,需要在flash的标签上设置停止冒泡,flash标签有<embed></embed><object></object>
  • 当元素滚动,页面滚动条不滚动时,需要设置滚动元素的阻止默认事件
document.body.addEventListener("scroll",scrollHandler);
function scrollHandler(e){
	//如果要设置flash中的滚动条不改变外部的滚动条,需要在flash的标签上设置停止冒泡
	e.stopPropagation();
} 

unload 卸载事件

unload 卸载事件,关闭窗口、原有的页面在刷新时,原有的页面会被卸载掉,这个时候触发事件。

注意:

  • 关闭当前浏览器标签时被触发,关闭浏览器时不被触发
  • e.preventDefault(),不能阻止卸载事件
window.addEventListener("unload",unloadhandler);
function unloadhandler(e){
	console.log(e);
}

load 加载事件

load 加载事件,给window增加load事件,页面中所有的元素被加载完成后触发该事件,包括图片,页面元素过多的话,加载时间会很长,所以不建议这么写

 window.onload=function(e){
     console.log(e);
}

error 错误事件

error 错误事件,比如地址错误造成的加载失败会触发

给 img 添加 src 后,触发 img 的 load 事件。先侦听再派发,所以要把事件侦听写在派发的上面。

var img=new Image();
img.addEventListener("load",loadHanlder)
img.addEventListener("error",errorHanlder);
img.src="./img/"+num+"-.jpg";
function loadHanlder(e){
	console.log(e);
}
function errorHanlder(e){
    console.log(e);
}
发布了46 篇原创文章 · 获赞 26 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Charissa2017/article/details/103880393