Blogger Information
Blog 40
fans 0
comment 1
visits 34613
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
JavaScript初学习之事件、常用表单事件、留言板、字符串常用方、数组常用的方法
景云
Original
742 people have browsed it

1.事件

1.1添加到元素的事件属性中
  1. <button onclick="console.log(this.innerHTML)">button</button>
1.2 通过脚本添加到事件属性中
  1. <button>button2</button>
  2. <script>
  3. const btn2=document.querySelector("body button:nth-of-type(2)");
  4. // 1.2.1添加事件
  5. btn2.onclick=function(){
  6. console.log(this.innerHTML);
  7. }
  8. // 又一次添加事件后,上一个添加的事件将会失效,因为onclick不能重复定义同一个事件
  9. btn2.onclick=function(){
  10. this.style.color="red";
  11. }
  12. // 1.2.2移出事件
  13. btn2.onclick=null;
  14. </script>
1.3 通过事件监听器添加事件
  1. <!-- // addEventListener(事件类型,事件回调方法,触发阶段) -->
  2. <button>button3</button>
  3. <script>
  4. const btn3=document.querySelector("body button:nth-of-type(3)");
  5. btn3.addEventListener("click",function(){
  6. console.log(this.innerHTML,"第一次");
  7. })
  8. // 1.3.1事件移出,通过回调函数添加的事件是无法移除的,可以通过声明一个事件函数,添加和移出事件都操作这个事件函数
  9. // 1.3.1.1 声明事件方法函数
  10. const handle=()=>console.log(btn3.innerHTML,"第二次");
  11. // 1.3.1.2 添加事件
  12. btn3.addEventListener("click",handle);
  13. // 1.3.1.3移出事件
  14. btn3.removeEventListener("click",handle);
  15. </script>
  16. <button>点击广告</button>
  17. <script>
  18. // 自定义事件
  19. const btn4=document.querySelector("body button:nth-of-type(4)");
  20. const ev=new Event("click");
  21. btn4.addEventListener("click",function(){
  22. console.log("点击了广告");
  23. })
  24. btn4.dispatchEvent(ev);//将会自动点击"点击广告"事件
  25. // 通过间歇式自动点击器来自动点击广告
  26. setInterval("btn4.dispatchEvent(ev)",1000);
1.3 事件传递
  1. <ul>
  2. <li>item1</li>
  3. <li>item2</li>
  4. <li>item3</li>
  5. <li>item4</li>
  6. <li>item5</li>
  7. </ul>
  1. // 事件传递: 1.捕获:从最外层元素逐级向内直到事件的绑定者; 2.目标:到达事件目标; 3.冒泡:从目标再由内逐级向上直到最外层属性
  2. const lis=document.querySelectorAll("li");
  3. lis.forEach(
  4. li=>(li.onclick=ev=>{
  5. // 事件对象:保存着当前对象的所有信息
  6. console.log(ev);
  7. // 事件类型
  8. console.log(ev.type);
  9. // 事件绑定者
  10. console.log(ev.currentTarget);
  11. // 事件触发者
  12. console.log(ev.target);
  13. // 事件传递的路径
  14. console.log(ev.path);
  15. // 阻止事件冒泡
  16. ev.stopPropagation();
  17. })
  18. )
1.4 事件冒泡与事件代理
  1. <ul>
  2. <li>item1</li>
  3. <li>item2</li>
  4. <li>item3</li>
  5. <li>item4</li>
  6. <li>item5</li>
  7. </ul>
  1. // 事件代理也叫事件委托
  2. const lis=document.querySelectorAll("li");
  3. //遍历每一个li,并逐个为它添加点击事件
  4. lis.forEach(li=>(li.onclick=ev=>console.log(ev.currentTarget)));
  5. //也可以将点击事件添加到其父元素上,通过事件触发者来获取元素
  6. document.querySelector("ul").addEventListener("click",ev=>{
  7. //获取事件绑定者
  8. console.log(ev.currentTarget);
  9. // 获取事件触发者,通常是“事件绑定者”的子元素
  10. console.log(ev.target);
  11. })

2.常用表单事件

2.1 CSS样式
  1. #login{
  2. width: 20em;
  3. border: 1px solid #888;
  4. padding: 1em 2em 1em;
  5. margin: 2em auto;
  6. box-sizing: border-box;
  7. background-color: lightcyan;
  8. display: grid;
  9. grid-template-columns: 3em 1fr;
  10. gap: 1em 0;
  11. }
  12. #login .title{
  13. grid-area: auto / span 2;
  14. place-self: center;
  15. }
  16. #login button{
  17. grid-area: auto / 2 / auto;
  18. }
2.2 HTML代码
  1. <form action="" method="POST" id="login">
  2. <label class="title">用户登录</label>
  3. <label for="username">账号:</label>
  4. <input type="text" name="username">
  5. <label for="password">密码:</label>
  6. <input type="password" name="password">
  7. <button type="submit" name="submit">登录</button>
  8. </form>
  1. // 获取表单
  2. const login=document.forms["login"];
  3. // 其他方法
  4. // const login=document.forms[0];
  5. // const login=document.forms["login"];
  6. // const login=document.forms.item(0);
  7. // const login=document.forms.item("login");
  8. // const login=document.forms.namedItem("login");
  9. // const login=document.querySelector("#login");
  10. // submit()提交
  11. // login.onsubmit=()=>alert("success");
  12. // 如果是自定义表单的提交行为,应该禁用掉默认的提交
  13. // login.onsubmit=ev=>ev.preventDefault();
  14. login.submit.onclick=ev=>{
  15. ev.preventDefault();//禁止默认的提交
  16. ev.stopPropagation()//阻止事件冒泡,不然会触发父级或祖先级的事件
  17. console.log(ev.currentTarget.form);
  18. // 表单中每一个元素都有一个form属性,并指向它所属的表单
  19. isEmpty(ev.currentTarget.form);
  20. }
  21. // 非空验证
  22. function isEmpty(form){
  23. if(form.username.value.length===0){
  24. alert("请输入帐号!");
  25. form.username.focus();
  26. return false;
  27. }else if(form.password.value.length===0){
  28. alert("请输入密码!");
  29. form.password.focus();
  30. return false;
  31. }else{
  32. alert("验证通过!");
  33. }
  34. }
2.3 与表单相关的几个事件
  1. 1.focus:获取焦点事件
  2. 2.blur:失去焦点事件
  3. 3.input:只要值发生变化时连续触发,不等到失去焦点
  4. 4.change:值发生了变化且失去了焦点时触发,适用于<input><select><textarea>
  5. 5.select:选中值时触发,适用于<input><textarea>
  6. 6.reset:将表单值全部重置到默认值
  7. 7.submit:提交表单时触发,注意触发对象是<form>,提交的是表单不是按钮
  8. 8.keydown:按下键盘时
  9. 9.keyup:松开键盘时
  10. 10.keypress:按住了键盘(除了Ctrlaltshiftmeta等之外有值的键)时,会先触发keydown,然后再keypress,一直重复这两个,直到触发keyup松开键盘时才结束
  11. 11.load
  12. 12.error
  13. 13.invalid:提交时表单元素值不满足验证条件时触发

3. 留言板

  1. <!-- 留言输入框 -->
  2. <input type="text" name="msg">
  3. <!-- 历史留言列表 -->
  4. <ol id="list"></ol>
  1. // 获取元素
  2. const msg=document.querySelector("input");
  3. const list=document.querySelector("#list");
  4. msg.onkeydown=ev=>{
  5. // 键盘事件中,key表示按下的键名
  6. // console.log(ev.key);
  7. if(ev.key==="Enter"){
  8. if(ev.currentTarget.value.length===0){
  9. alert("留言不能为空!");
  10. }else{
  11. // 不为空则将留言添加到列表中
  12. // 创建留言
  13. let str=`<li>${ev.currentTarget.value}</li>`;
  14. // 最新留言应放置首位
  15. list.insertAdjacentHTML("afterBegin",str);
  16. // 留言添加后将留言框清空
  17. ev.target.value=null;
  18. }
  19. }
  20. }


4. 字符串常用方法

  1. const strs="a1b2c3d4e5f6g7h8i9j";
  2. // 1.concat(); 拼装
  3. let str="html".concat(" css"," js"," php"," !");//html css js php !
  4. // 2.slice(start,end); 取子串,start表示开始截取的位置,end表示截取结束的位置;正数从0开始数,负数从-1开始数;正数负数可以同时用,但是不能出现start的位置在end位置后面。
  5. str=strs.slice(2,5); //b2c
  6. str=strs.slice(-7,-5); //g7
  7. // 3.substr(start,length); 取子串; start表示开始的位置,length表示截取多少位;支持正负数。
  8. str=strs.substr(2,5);//b2c3d
  9. // 4.trim() 删除两端空格
  10. let psd=" password ";//length=12
  11. psd=psd.trim();//length=8
  12. // 5.split() 将字符串通过指定字符转换为数组
  13. str=strs.split("");//(19) ["a", "1", "b", "2", "c", "3", "d", "4", "e", "5", "f", "6", "g", "7", "h", "8", "i", "9", "j"]
  14. str="Jy@php.cn".split("@");//(2) ["Jy", "php.cn"]

5.数组常用的方法

5.1 push() pop() 在数组的尾部进行增删

栈方法;栈:先进后出;对:先进先出;对和栈是仅允许在一端进行增删

  1. let arr=[];
  2. arr.push(1,2,3);//[ 1, 2, 3 ]
  3. arr.pop();//[ 1, 2 ]
5.2 unshift() shift() 在数组的头部进行增删
  1. arr.unshift(4,5,6);//[ 4, 5, 6, 1, 2 ]
  2. arr.shift();//[ 5, 6, 1, 2 ]

push()+shift() 模拟队列,尾部进入,头部出去 ; pop()+unshift() 模拟队列:头部进入,尾部出去

5.3 join() 将数组转为字符串,与split()功能相反
  1. arr=['a','b','c'];
  2. let res=arr.join('---');//a---b---c 分隔符默认为“,”
5.4 concat() 数组合并

[1,2,3].concat(4,[5,6]);//[ 1, 2, 3, 4, 5, 6 ]

5.5 slice() 返回数组部分成员 支持负数
  1. arr=[1,2,3,4,5,6];
  2. res=arr.slice(0,2);//[ 1, 2 ] 从第一位数开始返回两个成员
5.6 splice(开始索引,删除的数量,插入的数据) 数组的增删改;它的本质工作是删除元素
5.6.1 删除
  1. arr.splice(2);//[ 1, 2 ] 从第三个成员开始,后面全部删除
  2. arr=[1,2,3,4,5,6];
  3. arr.splice(3,2);//[ 1, 2, 3, 6 ] 从第四个成员开始,删除两个成员
5.6.2 更新
  1. arr=[1,2,3,4,5,6];
  2. arr.splice(1,2,8,9);//[ 1, 8, 9, 4, 5, 6 ] 从第二个成员开始删除两个,并从第一个位置之后插入成员
  3. // arr.splice(1,2,...[8,9]);//上面的可以修改为这种
5.6.3 新增,方法的第二个参数写为0就可以了
  1. arr=[1,2,3,4,5,6];
  2. arr.splice(2,0,...[11,22,33]);//[ 1, 2, 11, 22, 33, 3, 4, 5, 6 ] 从第二个成员之后添加新成员,
5.7 sort() 数组排序 按照字母表顺序
  1. arr=['p','t','c'];
  2. arr.sort();//[ "c", "p", "t" ]
  3. arr=[10,5,6,77,23];//[ 10, 23, 5, 6, 77 ]
  4. arr.sort();
  5. // 上面排序非正确排序,因为把数字当成字符串来进行比较了,可以用下面的方法
  6. arr.sort((a,b)=>a-b);//[ 5, 6, 10, 23, 77 ]
  7. // 倒序
  8. arr.sort((a,b)=>b-a);//[ 77, 23, 10, 6, 5 ]
5.8 遍历
  1. arr=[1,2,3,4,5,6];
  2. res=arr.forEach(item=>item);//undefined 没有返回值,只要在方法内返回元素才有值,那也是方法的值
  3. // map() 对数组每个成员都调用回调进行处理并返回这个数组
  4. res=arr.map(item=>item);//[ 1, 2, 3, 4, 5, 6 ]
5.9 filter() 过滤
  1. arr=[1,2,3,4,5,6];
  2. res=arr.filter(item=>item%2);//[ 1, 3, 5 ] 取奇数
  3. arr=[1,2,3,4,5,6];
  4. res=arr.filter(item=>!(item%2));//[ 2, 4, 6 ] 取偶数
5.10 reduce(callback(prev,curr)) 归内 第二个参数是累加的初始值,不设置默认为0
  1. arr=[1,2,3,4,5,6];
  2. res=arr.reduce((prev,curr)=>{
  3. // console.log(prev,curr);//可以看出来归内的过程
  4. return prev+curr;
  5. },1000)
  6. // 简写为:
  7. // res=arr.reduce((prev,curr)=>prev+curr,1000);
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post