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

JS货币转换器交换按钮仅可点击一次生效问题排查

搞定你的货币交换按钮问题!

嘿,我一眼就看到了代码里的几个关键问题,正是这些小bug让你的交换按钮只能生效一次,咱们逐个解决:

1. 条件判断用了赋值而非比较

你在if和else if里写的是leftBtn.textContent = "EUR"——这里的=是赋值操作,不是比较!每次触发函数时,都会直接把"EUR"塞给leftBtn.textContent,导致条件永远为真,永远只会执行第一个分支,根本走不到else if里。

得改成比较运算符,推荐用严格相等===(类型和值都匹配,更严谨),还要加trim()去掉文本前后的空格——因为你的按钮里是"USD " + '<span...',textContent会带个空格,直接比"USD"会不匹配:

if (leftBtn.textContent.trim() === "EUR") {
  // ...
} else if (leftBtn.textContent.trim() === "USD") {
  // ...
}

2. 第二个分支的文本设置写错了

看这个代码:

leftBtn.textContent = "EUR " + + '<span class="caret"></span>';

这里多了个多余的+号,变成了"EUR " + + '<span...',会把字符串转成数字(结果是NaN),显示肯定不对。而且用textContent的话,<span>标签会被当成纯文本显示,不会变成下拉箭头,得和第一个分支一样用innerHTML。

修正后应该是:

leftBtn.innerHTML = "EUR " + '<span class="caret"></span>';
rightBtn.innerHTML = "USD " + '<span class="caret"></span>';

3. 图片路径的小细节

第二个分支里你写的是leftImg.src = "assets/img/eu-flag.png",但第一个分支是rightImg.src = "assets/img/eu-flag.jpg",后缀不一致,得确保和你实际的图片文件后缀匹配,不然图片会加载失败。

完整修正后的代码

var changeCurr = document.getElementById("swap-currency");
function swap() {
  var leftBtn = document.getElementById("konverter-btn-left");
  var rightBtn = document.getElementById("konverter-btn-right");
  var leftImg = document.getElementById("konverter-img-left");
  var rightImg = document.getElementById("konverter-img-right");
  
  // 用trim()处理空格,避免判断失效
  if (leftBtn.textContent.trim() === "EUR") {
    leftBtn.innerHTML = "USD " + '<span class="caret"></span>';
    rightBtn.innerHTML = "EUR " + '<span class="caret"></span>';
    leftImg.src = "assets/img/usa-flag.png";
    rightImg.src = "assets/img/eu-flag.jpg";
  } else if (leftBtn.textContent.trim() === "USD") {
    leftBtn.innerHTML = "EUR " + '<span class="caret"></span>';
    rightBtn.innerHTML = "USD " + '<span class="caret"></span>';
    leftImg.src = "assets/img/eu-flag.jpg"; // 和第一个分支统一后缀
    rightImg.src = "assets/img/usa-flag.png";
  }
}
changeCurr.addEventListener("click", swap);

额外优化小技巧

为了避免以后再遇到textContent受空格或HTML结构影响的问题,你可以给按钮加个自定义属性data-currency来存当前货币类型,这样判断起来更可靠:

比如按钮标签改成这样:

<button id="konverter-btn-left" data-currency="EUR">EUR <span class="caret"></span></button>
<button id="konverter-btn-right" data-currency="USD">USD <span class="caret"></span></button>

然后JS里换成:

function swap() {
  var leftBtn = document.getElementById("konverter-btn-left");
  var rightBtn = document.getElementById("konverter-btn-right");
  var leftImg = document.getElementById("konverter-img-left");
  var rightImg = document.getElementById("konverter-img-right");
  
  // 读取自定义属性里的货币类型
  var leftCurr = leftBtn.dataset.currency;
  var rightCurr = rightBtn.dataset.currency;
  
  // 先交换属性值
  leftBtn.dataset.currency = rightCurr;
  rightBtn.dataset.currency = leftCurr;
  
  // 再更新显示和图片
  if (leftCurr === "EUR") {
    leftBtn.innerHTML = "USD " + '<span class="caret"></span>';
    rightBtn.innerHTML = "EUR " + '<span class="caret"></span>';
    leftImg.src = "assets/img/usa-flag.png";
    rightImg.src = "assets/img/eu-flag.jpg";
  } else {
    leftBtn.innerHTML = "EUR " + '<span class="caret"></span>';
    rightBtn.innerHTML = "USD " + '<span class="caret"></span>';
    leftImg.src = "assets/img/eu-flag.jpg";
    rightImg.src = "assets/img/usa-flag.png";
  }
}

这样不管按钮文本里有没有空格或者HTML结构怎么变,判断都不会出错,更健壮~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:48:00