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

jQuery中替换变量后仍使用旧值的问题排查

问题原因与解决方案

问题出在jQuery的.data()方法的缓存机制上:第一次调用.data('buy')时,jQuery会把DOM上data-buy的初始值(50000)存入内存缓存;之后你用.attr()修改了DOM上的data-buy/data-sell属性,但.data()再读取时仍会取缓存里的旧值,不会重新读取DOM属性,所以切换时显示的还是初始值。

另外你最后尝试的代码里,把按钮选择器写成了.change(类选择器),但按钮的id是change,应该用#change才能正确触发事件。

解决办法1:用.data()更新数据(推荐)

修改#change的点击事件,直接用.data()设置buy和sell的值,这样会同步更新jQuery的内部缓存,后续切换时读取的就是最新值:

$(document).on("click", "#change", function(){
    $(".myVar").data("buy", 6000);
    $(".myVar").data("sell", 9000);
});

toggle逻辑无需修改,继续用.data()读取即可。

解决办法2:直接读取DOM属性

如果需要保留DOM上data-*属性的可见更新,那么在toggle切换时,不要用.data(),改用.attr()直接读取DOM上的属性值:

$("#toggle").toggle(
    function(){
        $(".myVar").val($(".myVar").attr("data-buy"));
    },
    function(){ 
        $(".myVar").val($(".myVar").attr("data-sell"));
    }
);

这种方式每次都会从DOM读取最新的属性值,不受缓存影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 02:44:59