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"]

更多相关文章

  1. Sql Server之旅——终点站 nolock引发的三级事件的一些思考
  2. 类的重载与命名空间
  3. 工作十余年,还是一直被问 委托和事件 有什么区别? 真是够了
  4. 事件与常用函数
  5. ALV双击弹出新ALV,并响应新ALV事件
  6. OO ALV常用功能完整简例(热键单击,双击,帮助,编辑,自定义工具条等)
  7. 致死事件大爆发,美国颁布紧急禁令:「电子烟无害健康」就是一场最大
  8. 原生js实现简单的链式操作
  9. 使用原生 js 实现选项卡、一键更换背景图片、图片懒加载和轮播图

随机推荐

  1. Android中3种方法实现back键动作
  2. javafx for android or ios ?
  3. Android系统中设置TextView的行间距(非行
  4. Android学习笔记(二三): 多页显示-Flipper的
  5. android中activity的四种加载模式
  6. android知识链接汇总(3)
  7. 第一天
  8. Android UI开发第一篇――android的九宫
  9. Android NDK开发实例教程
  10. 【android】下载文件至本应用程序的file