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

选中项值发生变化时如何实时运行JavaScript代码

解决方案

原有代码仅在页面刷新时生效的原因是:仅在页面加载阶段执行了一次判断逻辑,没有绑定对应元素值变化的触发事件,值更新后不会自动重新运行判断逻辑。

首先先纠正原有代码的几个基础错误:

  • document.querySelector() 返回的是首个匹配的单个DOM元素,不需要加[0],只有querySelectorAll()返回的节点集合才需要用下标取值
  • 你提供的.wapf-grand-total是input输入框元素,读取值应该用.value而非.innerText
  • 原有逻辑缺少元素值等于$260时恢复按钮显示的分支,否则按钮隐藏后不会再恢复显示

场景1:值变化由用户手动输入触发

直接给input绑定input事件即可实现实时响应,完整代码如下:

// 提前获取DOM元素,避免重复查询损耗性能
const totalInput = document.querySelector('.wapf-grand-total')
const targetBtn = document.querySelector('button')

// 封装按钮显隐判断逻辑
function toggleButton() {
  const currentValue = totalInput.value.trim()
  // 不等于$260时隐藏按钮,等于时显示
  targetBtn.style.display = currentValue === '$260' ? 'block' : 'none'
}

// 页面加载时先执行一次判断
toggleButton()
// 绑定输入事件,值变化时自动触发判断逻辑
totalInput.addEventListener('input', toggleButton)

场景2:值由其他JS代码动态修改,无用户输入操作

这种场景下需要用MutationObserver监听元素属性变化实现响应:

const totalInput = document.querySelector('.wapf-grand-total')
const targetBtn = document.querySelector('button')

function toggleButton() {
  const currentValue = totalInput.value.trim()
  targetBtn.style.display = currentValue === '$260' ? 'block' : 'none'
}

// 页面加载先执行一次判断
toggleButton()

// 创建观察者实例
const observer = new MutationObserver(toggleButton)
// 配置监听规则:仅监听input的value属性变化
observer.observe(totalInput, {
  attributes: true,
  attributeFilter: ['value']
})

// 后续如果需要停止监听可执行 observer.disconnect()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:39:04