博客列表 >JavaScript初学习之事件、常用表单事件、留言板、字符串常用方、数组常用的方法

JavaScript初学习之事件、常用表单事件、留言板、字符串常用方、数组常用的方法

景云
景云原创
2021年03月02日 17:06:57751浏览

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);
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议