Blogger Information
Blog 45
fans 0
comment 0
visits 34594
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
js事件与常用函数
咸鱼老爷
Original
733 people have browsed it

事件

事件添加

  • 1、添加到元素的事件属性上
    1. <button onclick='conslole.log(this,innerHTML)'>这是按钮</button>
  • 2、通过脚本添加到事件属性上
    1. const btn=document.querySelector('button');
    2. btn.onclick=function(){
    3. consloe.log(this.innerHTML);
    4. }

移除事件:btn.onclick=null

  • 3、通过事件监听器添加事件
    addEventListener(事件类型,事件回调方法,触发阶段)
    1. btn.addEventListener('click',function(){
    2. console.log(this.innerHTML);
    3. })
    移除事件:通过回调添加的事件是无法移除的;
    事件移除函数:
    btn.removeEventListener(事件类型,方法);
    注意:通过脚本添加事件只能响应一个,事件监听器可以添加多个事件。
  • 事件派发
    1. //自定义点击事件
    2. const ev = new Event('click');
    3. const btn = document.querySelector('button');
    4. let i = 0
    5. btn.addEventListener('click', () => console.log('点击了' + i++ + "次"));
    6. //事件派发自动执行
    7. // btn.dispatchEvent(ev)
    8. //使用间歇式定时器自动执行
    9. setInterval('btn.dispatchEvent(ev)', 1000);
  • 事件传递

    1. const lis = document.querySelectorAll('li');
    2. lis.forEach(li => {
    3. (li.onclick = (ev) => {
    4. console.log('事件对象' + ev)
    5. // 事件对象:保存着当前事件的所有信息
    6. //事件类型
    7. console.log('事件类型' + ev.type);
    8. //事件绑定者
    9. console.log('事件绑定者' + ev.currentTarget);
    10. // 事件触发者
    11. console.log('事件触发者' + ev.target);
    12. //事件传递的路径
    13. console.log('事件传递途径' + ev.path);
    14. //on+event:不支持捕获,只有冒泡
    15. })
    16. });

    1、捕获:从最外层元素逐级向内直到事件的绑定者;

    1. const lis = document.querySelectorAll('li');
    2. lis.forEach(li => {
    3. (li.onclick = ev => {
    4. // console.log('事件对象' + ev)
    5. // // 事件对象:保存着当前事件的所有信息
    6. // //事件类型
    7. // console.log('事件类型' + ev.type);
    8. // //事件绑定者
    9. console.log('事件绑定者' + ev.currentTarget);
    10. // // 事件触发者
    11. // console.log('事件触发者' + ev.target);
    12. //事件传递的路径
    13. console.log('事件传递途径' + ev.path);
    14. //on+event:不支持捕获,只有冒泡
    15. })
    16. });
    17. //捕获,第三个参数是true表示事件在捕获阶段触发,false是冒泡(默认)
    18. // window
    19. window.addEventListener('click', ev => console.log(ev.currentTarget), true)
    20. // document
    21. document.addEventListener('click', ev => console.log(ev.currentTarget), true)
    22. // html
    23. document.documentElement.addEventListener('click', ev => console.log(ev.currentTarget), true)
    24. // body
    25. document.body.addEventListener('click', ev => console.log(ev.currentTarget), true)
    26. // ul
    27. document.querySelector('ul').addEventListener('click', ev => console.log(ev.currentTarget), true);


    2、目标:到达事件目标

3、冒泡:从目标再由内向外逐级向上直到最外层元素

  1. // ul
  2. document.querySelector('ul').addEventListener('click', ev => console.log(ev.currentTarget));
  3. // body
  4. document.body.addEventListener('click', ev => console.log(ev.currentTarget))
  5. // html
  6. document.documentElement.addEventListener('click', ev => console.log(ev.currentTarget))
  7. // document
  8. document.addEventListener('click', ev => console.log(ev.currentTarget))
  9. // window
  10. window.addEventListener('click', ev => console.log(ev.currentTarget))


阻止冒泡:ev.stopPropagation();

  • 事件代理|事件委托
    1. const lis = document.querySelectorAll('li');
    2. //遍历每个li,并逐个为它添加点击事件
    3. // lis.forEach(li => (li.onclick = ev => console.log(ev.currentTarget)))
    4. const ul = document.querySelector('ul').addEventListener('click', ev => {
    5. // 事件绑定者
    6. console.log(ev.currentTarget);
    7. // 事件触发者,通常是事件绑定者的子元素
    8. console.log(ev.target.innerHTML);
    9. })

表单常用事件

focus:获取焦点
blur:失去焦点
input:只要值发生变化时连续触发,不等失去焦点
change:值发生变化了改变失去焦点了时触发,input ,select, textarea
select:选中文本时触发 ,input ,textarea
invalid:提交时表单元素值不满足验证条件时触发
reset:将表单值全部重置到默认值
submit:提交表单时触发,注意触发对象是form,提交的是表单而不是按钮
keydown:按下键盘时;
keyup:松开键盘时
keypress:按过了键盘时,按下有值键时(除ctrl/alt/shift/meta),先触发keydown
按下一直不放手的触发顺序:keydown,keypress,重复这两个事件,直到keyup
表单中的每一个子元素都一个form属性,指向它所属的表单(ev.currentTarget.form)

  1. //获取表单
  2. // const login = document.forms[0];
  3. // const login = document.forms['login'];
  4. // const login = document.forms.item(0);
  5. // const login = document.forms.item('login');
  6. // const login = document.forms.namedItem('login');
  7. const login = document.querySelector('#login')
  8. console.log(login);
  9. //提交事件
  10. // login.onsubmit = () => alert('提交');
  11. //如果是自定义表单的提交行为,应该禁用默认提交行为
  12. login.onsubmit = ev => ev.preventDefault();
  13. //自定义提交
  14. login.submit.onclick = ev => {
  15. //阻止冒泡
  16. ev.stopPropagation();
  17. }

非空验证小案例

  1. function isEmpty(form) {
  2. console.log(form.username.value.length);
  3. console.log(form.password.value.length);
  4. if (form.username.value.length === 0) {
  5. alert('账号不能为空');
  6. form.username.focus();
  7. return false;
  8. }
  9. if (form.password.value.length === 0) {
  10. alert('密码不能为空');
  11. form.password.focus();
  12. return false;
  13. }
  14. alert('验证通过');
  15. }

实现简单留言板

  1. <body>
  2. <label for="message"><input type="text" name="message" id="message"></label>
  3. <ol class="list"></ol>
  4. </body>
  5. <script>
  6. const msg = document.querySelector('#message')
  7. const list = document.querySelector('.list')
  8. msg.onkeydown = ev => {
  9. // console.log(ev.keyCode);
  10. if (ev.keyCode == 13) {
  11. if (ev.currentTarget.value.length == 0) {
  12. alert('内容不能为空')
  13. } else {
  14. let str = `<li>${ev.currentTarget.value}</li>`;
  15. list.insertAdjacentHTML("afterbegin", str);
  16. ev.currentTarget.value = ''
  17. }
  18. };
  19. }
  20. </script>

字符串常用函数

  • 1、concat() 拼装
    1. let str = 'html'.concat('css', 'php', 888);
    2. console.log(str);
  • 2、slice(开始,结尾) 取子串;正方向从前取从0开始。负值从后取-1开始。
    1. let res = str.slice(0);
    2. res = str.slice(-1)
    3. console.log(res);
  • 3、substr(开始,长度) 支持负数
    1. res = str.substr(0, 5)
    2. console.log(res);
  • 4、trim() 去掉俩端空格
    1. let pow = ' asdasd ';
    2. console.log(pow.length);
    3. console.log(pow.trim().length);
  • 5、split(分隔符) 将字符串打散成数组
    1. res = str.split('');
    2. console.log(res);
  • 6、toUpperCase() / toLowerCase() 大小写转换
    1. res = str.toUpperCase();
    2. console.log(res);
    3. res = str.toLowerCase();
    4. console.log(res);
  • 7、 indexOf()来定位字符串中某一个指定的字符首次出现的位置
    1. res = str.indexOf('m');
    2. console.log(res);
  • 8、match() 查找字符串中特定的字符,并且如果找到的话,则返回这个字符
    1. res = str.match('html');
    2. console.log(res);
  • 9、 replace(要替换的,替换成) 在字符串中用某些字符替换另一些字符。
    1. res = str.replace('html', 'hello');
    2. console.log(res);
  • 10、charAt() 返回指定位置的字符 从0开始第一个
    1. res = str.charAt(5);
    2. console.log(res);
  • 11 、substring() 提取字符串中介于两个指定下标之间的字符。返回的子串包括 开始 处的字符,但不包括 结束 处的字符。substring(from, to)
    1. res = str.substring(0, 7);
    2. console.log(res);
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