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

JavaScript新手求助:绑定change事件后函数无法正常执行

JavaScript新手求助:绑定change事件后函数无法正常执行

嗨,我来帮你定位问题啦!你猜对了,问题确实出在第二行的事件绑定代码上,咱们一步步说清楚:

问题根源:事件绑定传参方式错了

当你写input1.addEventListener("change", updateValue(input1));的时候,你是直接执行了updateValue(input1)这个函数,然后把它的返回值(这里是undefined,因为你的函数没有return语句)传给了addEventListener。而addEventListener需要的是一个函数引用——也就是告诉它“当事件触发时,你去调用这个函数”,而不是“现在就把这个函数执行了,把结果给我”。

所以页面加载的时候,updateValue会被执行一次,但当你修改输入框内容触发change事件时,根本没有对应的回调函数去响应,这就是为什么你看不到效果,也没报错的原因。

两种修复方案

方案1:用匿名函数包裹调用

把第二行代码改成这样:

input1.addEventListener("change", function() {
  updateValue(input1);
});

这样我们传给addEventListener的是一个匿名函数,当change事件触发时,这个匿名函数才会执行,进而调用updateValue(input1),完美解决了“提前执行”的问题。

方案2:利用事件对象获取目标元素(更优雅)

这种方式不需要提前传入元素,而是通过事件本身的target属性拿到触发事件的输入框,复用性更强,适合以后扩展多个输入框的场景:

  1. 先修改事件绑定:
input1.addEventListener("change", updateValue);
  1. 然后修改updateValue函数,接收事件对象:
function updateValue(event) {
  const field = event.target; // 从事件对象里拿到触发事件的输入框
  var InputOrgColor = field.style.backgroundColor;

  const apiUrl = 'https://hook.eu1.make.com/wr3p7mnuqokj9...wns2n?voucher-id=' + field.value;

  if (field.value === ``) {
    field.style.backgroundColor = InputOrgColor;
    document.getElementById("submit").style.visibility = `visible`;
  } else { // 这里建议加上大括号,增强可读性
    fetch(apiUrl)
      .then(response => {
        if (response.status === 200) {
          field.style.backgroundColor = `#99ffcc`;
          document.getElementById("submit").style.visibility = `visible`;
        } else if (response.status === 201) {
          field.style.backgroundColor = `#ffcccb`;
          document.getElementById("submit").style.visibility = `hidden`;
          alert("Der Gutscheincode wurde nicht gefunden. Bitte überprüfe Deine Eingabe.");
        } else if (response.status === 202) {
          field.style.backgroundColor = `#ffcccb`;
          document.getElementById("submit").style.visibility = `hidden`;
          alert("Der Gutscheincode wurde zwar gefunden, aber der Gutschein ist entweder unbezahlt oder bereits abgesprungen.");
        }
      })
  }
};

额外小建议

原代码里else后面的fetch语句没有加大括号,虽然语法上没问题,但代码可读性会变差,建议像上面那样加上大括号,养成良好的编码习惯哦~

备注:内容来源于stack exchange,提问作者Ralf Becker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 09:50:29