You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript表单验证首次校验后失效问题求助

问题分析与修复方案

一、第一个函数无法清除无效输入的问题

你在casing_val里犯了个基础错误:把x赋值成了输入框的文本值(字符串类型),而不是输入框的DOM元素本身。所以执行x.value = ""只是给一个字符串变量加了个无用属性,根本不会清空输入框。

修复方法:先获取输入框的DOM对象,再操作它的value属性,同时建议把输入值转成数字再比较(避免字符串比较的逻辑错误,比如"100"会被判定为小于"99")。

二、其余函数无响应的问题

firstscreen_val函数完全没被触发,因为你没给对应的输入框绑定任何事件(比如onchange)。只有casing_diam_mm输入框加了onchange=casing_val(),另外两个筛管相关的输入框没有绑定触发校验的事件,浏览器自然不知道什么时候去执行这个函数。

修复方法:给需要校验的输入框添加onchange事件,绑定firstscreen_val函数,同时同样处理数值转义的问题。


修正后的JavaScript代码

function casing_val() {
  // 先获取DOM元素,再分别取值
  const casingInput = document.getElementById("casing_diam_mm");
  const holeInput = document.getElementById("hole_diam_mm");
  const x = parseFloat(casingInput.value);
  const y = parseFloat(holeInput.value);
  
  // 先判断是否为有效数字,再做比较
  if (!isNaN(x) && !isNaN(y) && x > y) {
    casingInput.value = "";
    alert("套管直径必须小于钻孔直径,请重新输入。");
  }
}

function firstscreen_val() {
  const screenTopInput = document.getElementById("screen1_top_dbg");
  const screenBotInput = document.getElementById("screen1_bot_dbg");
  const depthInput = document.getElementById("depth_dbg");
  
  const st1 = parseFloat(screenTopInput.value);
  const sb1 = parseFloat(screenBotInput.value);
  const z = parseFloat(depthInput.value);

  // 校验有效数字后再判断逻辑
  if (!isNaN(st1) && !isNaN(sb1) && sb1 < st1) {
    alert("筛管底部必须低于顶部,请重新输入。");
  }
  if (!isNaN(st1) && !isNaN(z) && st1 > z) {
    alert("筛管顶部必须低于总深度,请重新输入。");
  }
}

修正后的HTML代码(添加事件绑定)

<div class="form-group">
  <label for="hole_diam_mm" class="sr-only">钻孔直径(mm)</label>
  <input type="text" name="hole_diam_mm" id="hole_diam_mm" tabindex="4" class="form-control" placeholder="钻孔直径(mm)" value="<?php echo $hole_diam_mm?>">
</div>
<div class="form-group">
  <label for="casing_diam_mm" class="sr-only">套管直径(mm)</label>
  <input onchange="casing_val()" type="text" name="casing_diam_mm" id="casing_diam_mm" tabindex="4" class="form-control" placeholder="套管直径(mm)" value="<?php echo $casing_diam_mm ?>">
</div>
<div class="form-group">
  <label for="screen1_top_dbg" class="sr-only">第一根筛管顶部</label>
  <!-- 绑定校验事件 -->
  <input onchange="firstscreen_val()" type="text" name="screen1_top_dbg" id="screen1_top_dbg" tabindex="5" class="form-control" placeholder="第一根筛管顶部" value="<?php echo $screen1_top_dbg ?>">
</div>
<div class="form-group">
  <label for="screen1_bot_dbg" class="sr-only">第一根筛管底部</label>
  <!-- 绑定校验事件 -->
  <input onchange="firstscreen_val()" type="text" name="screen1_bot_dbg" id="screen1_bot_dbg" tabindex="6" class="form-control" placeholder="第一根筛管底部" value="<?php echo $screen1_bot_dbg ?>">
</div>

内容的提问来源于stack exchange,提问作者nick_hydro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 02:05:38