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

jQuery:如何在select的onChange事件中获取切换前后的value值?

获取Select onChange事件的新旧值方案

当然可以实现这个需求啦!因为onChange触发时,select的value已经更新成新值了,所以咱们需要提前把旧值存起来,下面给你几种简单好用的方案:

方案1:全局变量存储旧值

这是最直接的方式,初始化时先拿到默认选中的value,之后每次触发事件时对比再更新:

// 初始化旧值为select的默认选中值
let oldValue = document.querySelector('select').value;

function getval(sel) {
  alert(`旧值: ${oldValue}, 新值: ${sel.value}`);
  // 更新旧值,方便下次事件触发时使用
  oldValue = sel.value;
}

对应的HTML保持你原来的写法即可:

<select onchange="getval(this);">
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>

方案2:用元素的dataset属性存储旧值(无全局变量)

如果不想用全局变量,可以把旧值存在select元素自己的data-*属性里,更干净:

<!-- 提前把默认选中的value写到data-old-value里 -->
<select onchange="getval(this);" data-old-value="1">
<option value="1" selected>One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
function getval(sel) {
  const oldValue = sel.dataset.oldValue;
  alert(`旧值: ${oldValue}, 新值: ${sel.value}`);
  // 更新元素的data属性,存储当前新值作为下次的旧值
  sel.dataset.oldValue = sel.value;
}

方案3:现代事件绑定+闭包(推荐)

更符合现代前端实践的写法,把内联事件换成addEventListener,用闭包存储旧值,避免全局变量和内联代码的耦合:

const selectElement = document.querySelector('select');
let oldValue = selectElement.value;

selectElement.addEventListener('change', function() {
  const newValue = this.value;
  alert(`旧值: ${oldValue}, 新值: ${newValue}`);
  oldValue = newValue;
});

对应的HTML可以去掉内联事件:

<select>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>

简单来说,核心思路就是提前缓存旧值,因为事件触发时select的value已经是新的了,没法直接从事件里拿到旧值,必须靠咱们自己存好~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:17:25