JS-项目实战-鼠标悬浮设置字体颜色以及控制键盘输入

news2025/4/3 17:50:57

1、fruit.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-1; 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
    }

    zj();
};
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();

    //绑定失去焦点事件
    priceInput.onblur = updatePrice;

    //输入框绑定键盘摁下事件,用于判断摁下的值是否合法
    priceInput.onkeydown = ckInput;
};
ckInput = function () {
    // 0-9:48-57    backspace:8    enter:13
    let kc = event.keyCode;
    if (!((kc >= 48 && kc <= 57) || kc == 8 || kc == 13)) {
        //取消事件
        event.returnValue = false;
    }
    if (kc == 13) {
        event.srcElement.blur();
    }
};
updatePrice = function () {
    let priceInput = event.srcElement;
    let newPrice = priceInput.value;
    let priceTD = priceInput.parentElement;
    priceTD.innerText = newPrice;

    xj(priceTD.parentElement)
};
xj = function (tr) {
    if (tr && tr.tagName == "TR") {
        let tds = tr.cells;
        let priceTD = tds[2];
        let fcountTD = tds[3];
        let xjTD = tds[4];

        let price = parseInt(priceTD.innerText);
        let fcount = parseInt(fcountTD.innerText);
        let xj = price*fcount;

        xjTD.innerText = xj;

        //同时更新总计
        zj();
    }
};
zj = function () {
    let fruitTbl = document.getElementById("fruit_tbl");
    let rows = fruitTbl.rows;
    let total = 0;
    for (let i = 1; i < rows.length - 1; i++) {
        let tr = rows[i];
        let xj = parseInt(tr.cells[4].innerText);
        total += xj;
    }
    rows[rows.length-1].cells[1].innerText = total;
};
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。事件传递现象

    if (obj.tagName == "TD") {
        let td=obj;
        //parentElement:父元素   td的父元素是tr。tr有很多td子元素
        let tr = td.parentElement;
        tr.style.backgroundColor = "purple";

        //获取当前所有单元格,然后设置单元格中字体的颜色
        let tds = tr.cells;
        for (let i = 0; i <tds.length; i++) {
            tds[i].style.color = "white";
        }
    }

}
function clearBGColor() {
    let td = window.event.srcElement;
    if (td.tagName == "TD") {
        let tr = td.parentElement;
        tr.style.backgroundColor = "transparent";

        //获取当前行所有单元格,然后设置单元格中字体的颜色
        let tds = tr.cells;
        for (let i = 0; i < tds.length; i++) {
            tds[i].style.color = "#031f02";
        }
    }
}

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>
                <tr>
                    <td colspan="2">总结:</td>
                    <td colspan="4">0</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%;
}

变量kc存储的是键盘事件对象event的keyCode属性,即按下的键盘键的编码值。不同的按键有不同的编码值,下面是一些常见按键的编码值:

  • 退格键:8
  • Tab键:9
  • 回车键:13
  • Shift键:16
  • Ctrl键:17
  • Alt键:18
  • Caps Lock键:20
  • Esc键:27
  • 空格键:32
  • Page Up键:33
  • Page Down键:34
  • End键:35
  • Home键:36
  • 左箭头键:37
  • 上箭头键:38
  • 右箭头键:39
  • 下箭头键:40
  • Delete键:46
  • 0键:48
  • 1键:49
  • ...以此类推,一直到9键:57
  • A键:65
  • B键:66
  • ...以此类推,一直到Z键:90

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

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

相关文章

会议动态 | 浙江省水泥行业高质量发展暨碳达峰推进会成功召开

2023年11月9日&#xff0c;由浙江省水泥协会和百年建筑网主办的“2023年浙江省水泥行业高质量发展暨碳达峰推进会”在浙江杭州成功召开。 水泥生产企业、环保企业、智能装备企业、研究机构等水泥产业上下游重点企业和行业知名专家领导近400人出席了本次会议。 参会代表围绕《浙…

在Pycharm不同项目中使用同一环境

一、打开代码1&#xff08;理想环境&#xff09; 查看环境所在地址。 二、打开另一个项目

淘宝商家私信脚本,自动批量阿里旺旺版,按键精灵源码分享

在UI界面设置话术后用#号分割多条&#xff0c;然后启动就会自动给搜素下面的商家发送指定消息的私信&#xff0c;脚本代码和UI界面代码我下面会分享出来&#xff0c;自己粘贴就可以用。 UI界面&#xff1a; UI界面代码&#xff1a; 界面1: { 请在下面设置话术: { 输入框: …

【机器学习基础】对数几率回归(logistic回归)

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;机器学习 欢迎订阅&#xff01;后面的内容会越来越有意思~ &#x1f4a1;往期推荐&#xff1a; 【机器学习基础】机器学习入门&#xff08;1&#xff09; 【机器学习基…

抠某区域地图方法

1.打开阿里云数据可视化平台DataV.GeoAtlas地理小工具系列 2. 选择要抠出来的区域&#xff0c;右侧选择要下载的json文件&#xff0c;如红框所示 3. 打开下载的文件&#xff0c;内容全部复制。 4. 打开百度地图示例Examples - Apache ECharts 5. 如下图所示&#xff0c;将下…

3.5 Linux 用户管理

1、账号 & 组账号 inux基于用户身份对资源访问进行控制&#xff0c;Linux 属于多用户的操作系统 a. Linux 用户 按建立方式分类&#xff1a; 内建账户: 由系统或程序自行建立的账户自定义账户: 管理员或特权人员手工建立 按权限分类&#xff1a; 特权账户: 有对系统或…

5. hdfs的界面详解

简介 hdfs 提供了一个比较有好的web-ui界面&#xff0c;开启配置如下 在hdfs-site.xml添加 <property><name>dfs.webhdfs.enabled</name><value>true</value> </property>访问&#xff0c;hadoop01:50070 Overview Overview hadoop01:…

Android 实现三维空间坐标系(WebView与JS交互,支持多条曲线,可设置坐标轴翻转等)

全部代码已经上传,点击上方进行下载 支持多条曲线的绘制,可旋转拖动放大缩小 1.布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app=&quo…

《Scratch等级考试(1~4级)历届真题解析》专栏总目录

❤️ 专栏名称&#xff1a;《Scratch等级考试&#xff08;1~4级&#xff09;历届真题解析》 &#x1f338; 专栏介绍&#xff1a;中国电子学会《全国青少年软件编程等级考试》Scratch等级考试&#xff08;1~4级&#xff09;历届真题解析。 &#x1f680; 订阅专栏&#xff1a;原…

Postman启动问题:Could not open Postman

Postman启动问题&#xff1a;Could not open Postman 状态&#xff0c;在单击Postman之后一直在转圈圈&#xff0c;无法正常启动。 细心的朋友会发现&#xff0c;右下角 会经常出现防火墙关闭等提示信息&#xff0c;表示该程序&#xff0c;在向外链接。 Error Could not open…

上传项目文件到Github,并解决fatal: unable to access问题,100%成功

一、背景 Github我们用的最多的就是clone别人的代码&#xff0c;但有时我们也希望上传自己的项目或代码。但github上传文件还是比较复杂的&#xff0c;中间会有许许多多奇怪的问题&#xff0c;因此记录一下其过程。 二、Github上传文件 1. 申请Github账号 这里默认你已经有…

数据库Communications link failure

1.出现错误查询 Error querying , Communications link failure #Error querying database.Cause:com.mysql.cj.jdbc.exceptions.CommunicationsException:Communications link failure The last packet successfully received from the server was 10,016 milliseconds ago. …

Axure RP 9下载教程,轻松入手!

Axurerp9是产品经理必备的专业快速原型设计工具。Axurerp9可以快速高效地创建产品原型图&#xff0c;绘制APP和网页的原型图、框架图、结构图等。但Axurerp9下载在用户体验上的缺陷也很明显&#xff0c;其设置交互方式相对繁琐&#xff0c;可视化不足、条件判断、变量、中继器等…

袭击大型银行在美子公司的勒索元凶—LockBit,「诺亚」实战出击主动防御

“让勒索软件再次伟大” 2022年 最活跃猖獗 的勒索软件 ——LockBit 已在全球范围内造成严重破坏 世界知名企业和机构接连受创 11月10日&#xff0c;LockBit再次行凶作案 某大型银行在美全资子公司遭攻击 导致部分金融服务业务中断 美国国债市场交易受此影响&#xff01…

PMP证书容易考吗?

勉强算是容易考的一类证书&#xff0c;因为都是选择题&#xff0c;碰运气也是可以得分的&#xff0c;但也有其一定的难度&#xff1a; 1、试卷难度&#xff1a;是笔试&#xff0c;180道题&#xff0c;题量大&#xff0c;比较机试耗时间。 2、题目难度&#xff1a;题目是中英文…

Odoo:行业领先的免费开源财务管理解决方案

面向现代企业的财务和会计软件 可靠关账&#xff0c;更快速、更准确地报告财务数据 Odoo ERP财务和会计软件可帮助财务主管设计、革新和理顺财务流程和运营。Odoo ERP无缝整合各种核心财务和会计功能&#xff0c;提供强大的合规管理特性&#xff0c;有助于企业改善业务绩效、提…

Linux_VMware 软件安装与虚拟机

从这里开始&#xff0c;我们就踏上了学习 Linux 的路程。长路漫漫亦灿灿&#xff0c;祝我也祝所有看到这篇文章的朋友&#xff01;&#xff01;&#xff01; 参考书目&#xff1a;【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.81 / ARM 裸机与嵌入式 Linux 驱动…

代码随想录算法训练营第五十七天丨 动态规划part17

647. 回文子串 思路 动态规划 动规五部曲&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 如果大家做了很多这种子序列相关的题目&#xff0c;在定义dp数组的时候 很自然就会想题目求什么&#xff0c;我们就如何定义dp数组。 绝大多数题目确实是…

Word2Vec浅谈

论文地址&#xff1a;Efficient Estimation of Word Representations in Vector Space 个人认为&#xff0c;word2vec主要解决的问题是one-hot中维度过高并且稀疏的问题。word2vec是Google团队在2013年发表的一篇paper&#xff0c;当时一经问世直接将NLP领域带到了一个新的高度…

学会使用这个平台,教你制作出色的产品画册?

产品画册是企业和用户之间的桥梁&#xff0c;它可以第一时间给用户传递我们企业的最新产品信息。如何制作一本精美的产品画册呢&#xff1f; 这个不难&#xff0c;给大家推荐一款免费实用的在线制作工具FLBOOK &#xff0c;用这个平台可以轻松制作精美电子产品画册。 在制作产…