JS-项目实战-编辑单价单元格,可以点击单价单元格并且出现文本框,并自动选中输入框内部的文本

news2024/9/21 4:35:07

1、鼠标悬浮和离开事件.js

//当页面加载完成后执行后面的匿名函数
window.onload = function () {
    //get:获取     Element:元素    By:通过...方式
    //getElementById()根据id值获取某元素
    let fruitTbl = document.getElementById("fruit_tbl");
    //table.rows:获取这个表格的所有的行,返回数组
    let rows = fruitTbl.rows;
    //从 1 开始,因为 第 0 行是表头,不需要绑定事件
    for (let i = 1; i < rows.length; i++) {
        let tr = rows[i];
        //事件动态绑定
        tr.onmouseover = showBGColor;
        tr.onmouseout = clearBGColor;

        //cell:单元格、细胞
        //获取这一行的所有的单元格
        let tds = tr.cells;
        let priceTD = tds[2];
        priceTD.onmouseover = showHand;

        priceTD.onclick=editPrice
    }
};
editPrice = function () {
    let priceTD = event.srcElement;
    //inner:在...内部

    let oldPrice = priceTD.innerText;

    //innerHTML:在节点内部填充一段HTML代码
    //priceTD.innerHTML = "<input type='text' size='2' value='"+oldPrice+"'/>";
    priceTD.innerHTML = "<input type='text' size='2'/>";
    /**
     * <td><input type="text" size="2"/></td>
     * first:第一个 child:孩子
     * firstChild:第一个子节点
     * @type {ActiveX.IXMLDOMNode | ChildNode | (() => (Node | null))}
     */
    let priceInput = priceTD.firstChild;
    priceInput.value = oldPrice;

    priceInput.select();

};
function showHand() {
    let priceTD = event.srcElement;
    //cursor光标
    priceTD.style.cursor = "pointer";
}
function showBGColor() {
    //window.event表示当前发生的事件 ”window.“可以省略
    // console.log(window.event);
    // alert(window.event);
    let obj = window.event.srcElement;
    //alert(obj);
    //console.log(obj);   //发现obj是td,而不是tr。事件传递现象
    let td=obj;
    //parentElement:父元素   td的父元素是tr。tr有很多td子元素
    let tr = td.parentElement;
    tr.style.backgroundColor = "purple";
}
    function clearBGColor() {
    let td = window.event.srcElement;
    let tr = td.parentElement;
    tr.style.backgroundColor = "transparent";
}

2、fruit.html

<!DOCTYPE html>
<html lang="zh_CN">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>js-DOM/BOM实战</title>
    <link href="style/fruit.css" rel="stylesheet"></link>
    <script src="js/鼠标悬浮和离开事件.js"></script>
</head>
<body>
    <div id="div0">
        <div id="div_title">欢迎使用水果库存系统</div>
        <div id="div2">
            <table id="fruit_tbl">
                <tr>
                    <th class="w10"><input type="checkbox" /></th>
                    <th class="w20">名称</th>
                    <th class="w20">单价</th>
                    <th class="w20">数量</th>
                    <th class="w20">小计</th>
                    <th class="w10">操作</th>
                </tr>
                <!-- on:当...时候  mouse:鼠标  over:在...上-->
                <!--当鼠标悬浮在这个tr上时,调用showBGColor()这个方法-->
                <tr>
                    <td><input type="checkbox" /></td>
                    <td>苹果</td>
                    <td>5</td>
                    <td>2</td>
                    <td>10</td>
                    <td><img src='imgs/del.png' class="delBtn"/></td>
                </tr>
                <tr>
                    <td><input type="checkbox" /></td>
                    <td>菠萝</td>
                    <td>3</td>
                    <td>5</td>
                    <td>15</td>
                    <td><img src='imgs/del.png' class="delBtn"/></td>
                </tr>
                <tr>
                    <td><input type="checkbox" /></td>
                    <td>哈密瓜</td>
                    <td>4</td>
                    <td>5</td>
                    <td>20</td>
                    <td><img src='imgs/del.png' class="delBtn"/></td>
                </tr>
                <tr>
                    <td><input type="checkbox" /></td>
                    <td>葡萄</td>
                    <td>10</td>
                    <td>5</td>
                    <td>50</td>
                    <td><img src='imgs/del.png' class="delBtn"/></td>
                </tr>
                <tr>
                    <td><input type="checkbox" /></td>
                    <td>青梅</td>
                    <td>10</td>
                    <td>5</td>
                    <td>50</td>
                    <td><img src='imgs/del.png' class="delBtn"/></td>
                </tr>
                <tr>
                    <td><input type="checkbox" /></td>
                    <td>人参果</td>
                    <td>10</td>
                    <td>5</td>
                    <td>50</td>
                    <td><img src='imgs/del.png' class="delBtn"/></td>
                </tr>
                <tr>
                    <td><input type="checkbox" /></td>
                    <td>菠萝蜜</td></td>
                    <td>10</td>
                    <td>5</td>
                    <td>50</td>
                    <td><img src='imgs/del.png' class="delBtn"/></td>
                </tr>
                <tr>
                    <td><input type="checkbox" /></td>
                    <td>西红柿</td>
                    <td>10</td>
                    <td>5</td>
                    <td>50</td>
                    <td><img src='imgs/del.png' class="delBtn"/></td>
                </tr>
            </table>
        </div>
    </div>
</body>
</html>

 3、fruit.css

*{
    color:rgb(3, 31, 2);
    font-weight: lighter;
}
body{
    padding:0;
    margin:0;
    background-color: rgb(3, 31, 2);
}
#div0{
    width:80%;
    border:0px solid red;
    background-color: rgb(209, 230, 235);
    margin-left:10%;
    padding-top:48px;
    padding-bottom:48px;
    margin-top:8px;
}
#div_title{
    width:80%;
    margin-left:10%;
    text-align: center;
    font-size:24px;
    letter-spacing: 4px;
    margin-bottom:16px;
}
#div2{
    margin-left:10%;
    border:0px solid red;
    width:80%;
}
.delBtn{
    width:16px;
    height:16px;
}
#fruit_tbl , #fruit_tbl td, #fruit_tbl th {
    border:1px solid lightgray;
    text-align: center;
}
#fruit_tbl{
    width:100%;
    line-height: 32px;
    border-collapse: collapse;
}
.w10{
    width:10%;
}
.w15{
    width:15%;
}
.w20{
    width:20%;
}

在JS中,使用 event.srcElement 属性可以获取触发事件的元素(即事件的源)。这个属性对于在事件处理函数中对元素进行操作非常有用。例如,可以使用 event.srcElement 来修改元素的样式,添加或删除元素的类等等。

下面是一个使用 event.srcElement 的例子,当用户单击页面上的任意元素时,会在控制台中输出该元素的 id 属性:

document.addEventListener('click', function(event) {
  console.log(event.srcElement.id);
});

此外,在老版本的 Internet Explorer 中,event.srcElement 是获取事件目标元素(即触发事件的元素)的首选属性,因为 event.target 不被支持。但在现代浏览器中,建议使用 event.target 来获取目标元素。

event.srcElement 可以用在JS中来获取触发事件的元素。在早期的IE浏览器版本中,该属性被广泛使用来获取事件源元素。 在现代浏览器中,推荐使用 event.target 属性来代替 event.srcElement 属性,因为 event.srcElement 在所有主流浏览器中并不总是支持。

通过使用 event.srcElement,您可以轻松地确定哪个元素触发了某个事件,并进一步针对该元素执行相应的操作。例如,您可以通过 event.srcElement 修改某个元素的样式或属性,或者为触发该事件的元素添加其他事件监听器来实现更多的功能。

在 JavaScript 中,event.srcElement 属性通常用于以下目的:

  1. 获取触发事件的元素:event.srcElement 可以返回触发事件的元素对象,也就是事件的目标元素。

  2. 判断事件来自哪个元素:通过检查 event.srcElement 属性,可以判断事件来自哪个元素,进而根据需要进行相应的操作。

  3. 兼容性考虑:event.srcElement 属性在早期的 IE 浏览器中得到了广泛支持,很多旧的网站和代码仍在使用该属性,如果需要兼容旧版 IE 浏览器,就需要使用 event.srcElement 属性。

需要注意的是,event.srcElement 属性已经被更加标准的 event.target 属性所取代,而且 event.target 属性在现代浏览器中得到了广泛支持,因此建议在编写新代码时使用 event.target 属性,而在兼容旧版 IE 浏览器时再考虑使用 event.srcElement 属性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1212411.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nginx + RTMP + nginx-http-flv-module 环境搭建(CentOS 7)

文章目录 1. 引言2. 安装 Nginx3. 安装依赖库4. 下载编译 Nginx with RTMP 模块5. 配置 Nginx6. 启动 Nginx7. 推流测试8. 播放测试9. 拓展9.1 鉴权配置9.2 HTTPS 配置9.3 安全性配置 10. 小结 &#x1f389;Nginx RTMP nginx-http-flv-module 环境搭建&#xff08;CentOS 7&…

程序员进阶之路,该怎么走?

时代洪流&#xff0c;大浪淘沙。 逆水行舟&#xff0c;不进则退。 如果你游的速度慢于水流&#xff0c;要么你就是被剩下的沙子&#xff0c;要么就是即将被打翻的行舟了。。。 身为程序员时刻保持危机感&#xff0c;然后陷入内卷...... 卷又卷不赢&#xff0c;躺又躺不平。 …

如何使用代理IP访问YouTube?

相信大家对YouTube都很熟悉&#xff0c;但是由于网络安全管制&#xff0c;我们在看YouTube视频时经常遇到由于地理封锁或网络限制而受到限制的人吗&#xff1f;如果是这样&#xff0c;您一定听说过代理IP&#xff08;代理服务器&#xff09;以及它们如何帮助您绕过此类限制&…

计算机视觉:使用opencv实现车牌识别

1 引言 汽车车牌识别&#xff08;License Plate Recognition&#xff09;是一个日常生活中的普遍应用&#xff0c;特别是在智能交通系统中&#xff0c;汽车牌照识别发挥了巨大的作用。汽车牌照的自动识别技术是把处理图像的方法与计算机的软件技术相连接在一起&#xff0c;以准…

2022年06月 Scratch(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

一、单选题(共25题,每题2分,共50分) 第1题 广场中有声控喷泉,当声音的音量大于60的时候,喷泉就会喷出水,现在的音量为30,下列哪个选项可以让喷泉喷出水? A: B: C: D: 答案:B 当前声音的音量为30,需要将声音增加到60以上就可以让喷泉喷出水,选项A将声音…

Java中 ==、equals() 、equalsIgnoreCase() 和compareTo() 方法对比详解

目录 运算符 equals() 方法 equalsIgnoreCase() 方法 compareTo() 方法 对比总结 运算符 运算符是Java中用于比较两个操作数是否相等的运算符。它可以用于比较基本数据类型和对象类型。 1、对于基本数据类型&#xff1a; 比较的是两个操作数的值是否相等。如果两个操作数…

Oracle(17)Managing Roles

目录 一、基础知识 1、基础介绍 2、Predefined Roles 预定义的角色 3、各种角色的介绍 二、基础操作 1、创建角色 2、修改用户默认role 3、回收role 4、删除role 5、为角色授权 6、授予角色给用户 7、查看用户包含的角色&#xff1a; 8、查看角色所包含的权限 9、…

教育数字化助力打造个性化语言学习环境

2023年,我国教育数字化呈现高速发展态势,网络教育用户规模、在线教育市场规模、数字内容市场规模再创历史新高,数字校园建设普及率、教师数字技术素养等均高于全球平均水平。 在数字技术支撑下,新的语言学习方式也在逐渐普及。 语言学家克拉申(Stephen Kr-ashen)提出的二语习得…

hidl hwbinder和binder混合使用相关的joinThreadPool问题解答

背景&#xff1a; 今天一个学员在群里有个提问如下图&#xff0c;怎么有两个joinThread&#xff0c;会执行么&#xff1f;joinThread不是死循环等待数据吗&#xff1f; /frameworks/av/media/mediaserver/main_mediaserver.cpp 当开始看到这个时候确实也觉得最后的hw的join根本…

今年跳槽成功测试工程师原来是掌握了这3个“潜规则”

随着金九银十逐渐进入尾声&#xff0c;还在观望机会的朋友们已经开始焦躁&#xff1a;“为什么我投的简历还没有回音&#xff1f;要不要趁现在裸辞好好找工作&#xff1f;” “金九银十”作为人们常说的传统“升职加薪”的黄金季节&#xff0c;也是许多人跳槽的理想时机。然而…

Windows本地配置带GPU的Pytorch环境

首先需要安装并配置好Anaconda环境&#xff0c;安装教程教程随便找一个就好。 第一步&#xff1a;安装好之后创建conda虚拟环境&#xff1a; conda create -n your_env_name pythonx.x 第二步&#xff1a;安装需要版本的pytorch&#xff1a;pytorch下载链接 cu100/torch-1.2…

用嘉立创查找元件的原理图

目录 1.打开立创商城 2.搜索元件 ​编辑 3.复制编号 ​编辑 4.打开元件库 5.将复制好的编号进行搜索 1.打开立创商城 2.搜索元件 3.复制编号 4.打开元件库 5.将复制好的编号进行搜索

虚拟机第一次如何打开

1、将别人的虚拟机拷贝到自己的电脑盘里&#xff1b; 2、打开VMware&#xff0c;选择“打开虚拟机”&#xff1b; 3、选择拷贝的虚拟机里的.vmx文件&#xff1b; 4、选择“播放虚拟机”&#xff1b; 5、如果出现一个选择框&#xff0c;选“我已复制改虚拟机”即可。

PC端微信@所有人逻辑漏洞

&#xff08;一&#xff09;过程 这个漏洞是PC端微信&#xff0c;可以越权让非管理员艾特所有人&#xff0c;具体步骤如下 第一步&#xff1a;找一个自己的群&#xff08;要有艾特所有人的权限&#xff09;“123”是我随便输入的内容&#xff0c;可以更改&#xff0c;然后按c…

第二篇 《随机点名答题系统》——题库管理详解(类抽奖系统、在线答题系统、线上答题系统、在线点名系统、线上点名系统、在线考试系统、线上考试系统)

目录 1.功能需求 2.数据库设计 3.流程设计 4.关键代码 4.1.题库维护 4.1.1数据请求示意图 4.1.2添加题库&#xff08;login.php&#xff09;数据请求代码 4.1.3删除题库&#xff08;login.php&#xff09;数据请求代码 4.1.4 业务处理Service&#xff08;tiKuService…

Python数据容器(字典)

字典 1.字典的定义2.字典数据的获取3.字典的嵌套4.嵌套字典的内容获取5.字典的常用操作6.常用操作总结7.遍历字典8.练习 1.字典的定义 同样使用{}&#xff0c;不过存储的元素是一个一个的&#xff1a;键值对&#xff0c;语法如下 # 定义字典字面量 {key:value,key:value,...,…

小学生加减乘除闯关运算练习流量主微信小程序开发

小学生加减乘除闯关运算练习流量主微信小程序开发 经过本次更新&#xff0c;我们增加了新的功能和特性&#xff0c;以提升用户体验和运算练习的趣味性&#xff1a; 能量石与激励视频&#xff1a;用户可以通过观看激励视频来获取能量石&#xff0c;这些能量石可以用于解锁收费…

去掉 webstorm 白线

webstorm 编辑界面出现一条白线 ctrlshifta 打开设置窗口, 输入 “显示右边距” 英文版输入 “show right margin” 点击关闭即可

网络超时检测-11.9

应用场景 在网络通信中&#xff0c;很多操作会使得进程阻塞&#xff1a; TCP套接字中的recv/acceptUDP套接字中的recvfrom超时检测的必要性 避免进程在没有数据时无限制地阻塞实现某些特定协议要求&#xff0c;比如某些设备规定&#xff0c;发送请求数据后&#xff0c;如果多长…

nginx启动命令

普通启动 切换到nginx安装目录的sbin目录下&#xff0c;执行&#xff1a;./nginx 通过配置文件启动 ./nginx -c /usr/local/nginx/conf/nginx.conf /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 其中-c是指定配置文件,而且配置文件路径必须指定绝对路…