批改状态:合格
老师批语:
java对象的事件添加有有三种方法
(1)通过对象的事件属性上
<button onclick="console.log)(this.innerHTML)">恭喜发财</button> //点击按钮,控制台输出 “恭喜发财”四个字
(2)通过脚本添加到事件属性上
const btn = document.querySelector("button");btn.onclick = () => {console.log(btn.innerHTML);}
注意事项:方法(2)不能重复定义同一个事件,后面添加的会前面添加的覆盖掉
// 第一个btn.onclikc = () => {console.log(btn.innerHTML);};// 第二个btn.onclick = () => {console.log(typeof btn);};//最终的输出结果是object,第一个事件属性的期望输出innerHTML被覆盖
(3)通过事件监听器添加事件:addEventListener(事件类型,事件回调方法,触发阶段)
const btn = document.querySelector("button");btn.addEventListener("click",function(){console.log(btn.innerHTML,"第一次");});
注意事项:通过回调添加的事件是无法移除的,可以用以下方法进行移除
const handle = () => console.log(btn.innerHTML,"第二次");//结合上面代码//添加以下代码。按钮点击之后,控制台输出://恭喜发财 第一次//恭喜发财 第二次btn.addEventListener("click",handle);// 可以通过removeEventListenner来移除事件btn.removeEventListener("click",handle);
一般情况下,事件都需要用户作出某个操作之后才能触发,如果我们希望某个事件能够自动触发时,可以通过事件派发来实现
const ev = new Event("click"); //指定事件类型let i = 1;btn.addEventListener("click",function(){console.log("第" + i + "次点击了按钮。");i++;}); //添加事件监听,点击之后,控制台输出:第i次点击了按钮。(每点一次,i递增1)//事件派发,正常情况是点击后,控制台才会输出第i次点击了按钮,但是通过事件派发之后,页面加载完成,控制台就会输出“第1次点击了按钮”,相当于自动执行了一次btn.dispatchEvent(ev);//如果我们希望按钮能够自动第1秒钟点击一次,让控制台不断输出,可以添加定时器实现setInterval("btn.dispatchEvent(ev)",1000);
事件的绑定者与事件的触发者是两个不一样的概念,如:
<ul><li>1</li><li>2</li><li>3</li><li>4</li></ul>const lis = document.querySelector("ul");lis.foreach(li => (li.onclick = ev =>{console.log(ev.type);//事件绑定者console.log(ev.currentTarget);//事件触发者console.log(ev.Target);console.log(ev.path);//控制台输出:li ul body html document window(其实就是事件冒泡的路径,on事件不支持事件捕获)}));
如果我们希望通过用户点击1、2、3、4时,来触发某些事件,那我们需要给每个li都添加一个事件监听器,且每个li添加的事件代码完全一样。此时我们可以将事件将由ul来代理,对事件来讲,ul就是事件绑定者,li就是事件触发者,实际上,事件触发者通常是事件绑定者的子元素
代码:
<div class="container"><label for="">请留言:</label><input type="text" class="newMessage" id="" /><ol class="oldMessage"></ol></div><script>//用户在文本框内输入的新留言const newMessage = document.querySelector(".newMessage");//用户已经输入过的旧留言,即是在下方显示的留言const oldMessage = document.querySelector(".oldMessage");newMessage.onkeydown = (ev) => {// console.log(ev.key); 可以打印输入到文本框的字符// 如果用户输入enter,代表输入结束,提交内容if (ev.key === "Enter") {if (newMessage.value.length === 0) {alert("输入不允许为空");} else {// 尝试在控制台输出文本框中的输入内容,无误// console.log(newMessage.value);//显示li的方法1:// const li = document.createElement("li");// li.innerHTML = newMessage.value;// oldMessage.insertAdjacentElement("afterbegin", li);//添加li的方法2:let newMessagelist = `<li>${ev.currentTarget.value}</li>`;oldMessage.insertAdjacentHTML("afterbegin", newMessagelist);//当将新留言添加到下面li中显示后,清空原来的输入框ev.currentTarget.value = null;}}};//当用户点击留言时,删除留言,如果加入一个链接或者一个按钮作为提示,用户体验好点,可以通过parentNode获取到对应的父元素lioldMessage.onclick = (ev) => {// console.log(ev.currentTarget);// console.log(ev.target);//当用户点击留言时,获取点击事件的触发对象li,然后从ol中通过removeChile方法,去除子元素lioldMessage.removeChild(ev.target);};</script>
//1 concat()拼装let str = "html".concat(" css ","php !",888); //输出html css php !888//2 slice(start,end)取子串srt ="hello world!";console.log(srt.slice(6,9));//输出wor//3 substr(start,length) 取子串str = "hello world!";console.log(srt.substr(6,4));//输出worl//4 trim();删除两端的空格str = " hello ";console.log(str.trim());//输出hello//5 将字符串打成数组res = "hello".split("");console.log(res);//输出:{"h","e","l","l","o"}//6 替换其中字符 replace(old,new)str = "hello world";console.log(str.replace("e","a"));//输出:hallo worldconsole.log(str.replace(/o/g,"k"));//将所有的o都换成k,输出hellk,wkrld//7 寻找索引search()str = "hello world!"console.log(str.search("!"));//返回"d"的首个位置索引,10//8 字符串长度console.log(str.length);//输出12//9 转换大写或者小写str = "Hello World!";console.log(str.toUpperCase());//输出HELLO WORLD!console.log(str.toLowerCase());//输出hello world!//10 返回指定索引位置的字符str = "hello";console.log(str.charAt(4));//输出o
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号