0

0

实现两个输入框数值的实时自动求和(无需点击按钮)

花韻仙語

花韻仙語

发布时间:2026-03-01 11:18:17

|

319人浏览过

|

来源于php中文网

原创

实现两个输入框数值的实时自动求和(无需点击按钮)

本文详解如何通过原生 JavaScript 实现两个 字段的实时加法计算,并将结果动态写入第三个只读输入框,全程无需用户点击任何按钮,解决因 DOM 加载时机、事件绑定不当或脚本执行顺序导致的“不生效”问题。

本文详解如何通过原生 javascript 实现两个 `` 字段的实时加法计算,并将结果动态写入第三个只读输入框,全程无需用户点击任何按钮,解决因 dom 加载时机、事件绑定不当或脚本执行顺序导致的“不生效”问题。

在构建表单类应用(如培训工时统计系统)时,常需对多个数值输入项进行即时汇总。理想体验是:用户在任意输入框中键入数字后,总和立即更新——而非依赖“计算”按钮。但许多开发者会遇到「代码看似正确却无响应」的问题,根源往往不在逻辑本身,而在JavaScript 执行时机事件选择不当

✅ 正确方案:oninput + 函数内联 DOM 查询

原始代码失败的核心原因有二:

HueBit AI
HueBit AI

一站式AI艺术创作工具

下载
  1. 脚本过早执行:<script> 标签位于 <head> 中,此时 <input> 元素尚未被浏览器解析,document.getElementById("inhouse") 返回 null; </script>
  2. 事件误用:oninput 本是更优选择(支持粘贴、拖拽等所有值变更),但原代码中函数 showsum() 依赖外部变量 text1/text2,而这些变量在页面加载时无法获取 DOM 元素(因 DOM 未就绪)。

以下为修复后的完整、健壮、可直接运行的解决方案:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
  <title>Sahodaya 25 Report - Form</title>
</head>
<body>
  <div class="container my-3">
    <form method="POST">
      <fieldset disabled>
        <div class="mb-3">
          <label for="disabledTextInput" class="form-label">Name</label>
          <input type="text" id="disabledTextInput" class="form-control" 
                 placeholder="<?php echo $_SESSION['name']?>" name="name" 
                 value="<?php echo $_SESSION['name']?>">

          <label for="disabledTextInput2" class="form-label my-2">Email</label>
          <input type="text" id="disabledTextInput2" class="form-control" 
                 placeholder="<?php echo $_SESSION['email']?>" name="email" 
                 value="<?php echo $_SESSION['email']?>">
        </div>
      </fieldset>

      <label for="inhouse" class="form-label">Inhouse Training Done In Hours</label>
      <input type="number" id="inhouse" class="form-control" 
             placeholder="Type Here" name="inhouse" required 
             oninput="calculateTotal()"><br>

      <label for="sahodaya" class="form-label">Sahodaya Training Done In Hours</label>
      <input type="number" id="sahodaya" class="form-control" 
             placeholder="JSSC + PSCC (Both)" name="sahodaya" required 
             oninput="calculateTotal()"><br>

      <label for="total" class="form-label">Total Hours Done</label>
      <input type="number" id="total" class="form-control" name="total" 
             value="0" readonly><br>

      <button type="submit" class="btn btn-primary">Submit</button>
    </form>
  </div>

  <!-- 将脚本移至 body 底部,确保 DOM 已加载 -->
  <script>
    function calculateTotal() {
      // 安全获取输入值并转为数字(NaN 时设为 0)
      const inhouse = parseFloat(document.getElementById('inhouse').value) || 0;
      const sahodaya = parseFloat(document.getElementById('sahodaya').value) || 0;
      const total = inhouse + sahodaya;

      // 写入结果(保留小数位数可选:total.toFixed(1))
      document.getElementById('total').value = total;
    }
  </script>

  <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

? 关键改进说明

  • ✅ 脚本位置优化:<script> 移至 </script>

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

248

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

947

2024.03.01

全局变量怎么定义
全局变量怎么定义

本专题整合了全局变量相关内容,阅读专题下面的文章了解更多详细内容。

87

2025.09.18

python 全局变量
python 全局变量

本专题整合了python中全局变量定义相关教程,阅读专题下面的文章了解更多详细内容。

103

2025.09.18

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

658

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

219

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1560

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

645

2023.11.24

Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

6

2026.02.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号