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

如何控制台打印input的val值?jQuery赋值后输出异常求助

问题原因分析

你遇到的问题核心是jQuery的val()方法的返回值特性:当你给val()传递参数(比如.val(dateSelected))时,它的作用是设置元素的值,并且返回的是jQuery对象本身,而不是你刚刚设置的那个值。这就是为什么console.log(dateCat)输出的是r.fn.init [prevObject: r.fn.init(1)](也就是jQuery实例),而不是你期望的2014。

解决方法

有两种简单的方式可以得到你想要的结果:

方法1:先设置值,再单独获取

把设置值和获取值的操作分开,调用不带参数的val()来获取input当前的值:

$("#sandbox-container span").on("click", function(e) { 
  $("#sandbox-container span").removeClass("selected_year"); 
  $(this).attr("class", "selected_year"); 
  var dateSelected = $(".selected_year").text(); 
  // 先设置值
  $(".time_value").val(dateSelected); 
  // 再获取值赋值给dateCat
  var dateCat = $(".time_value").val(); 
  console.log(dateSelected); 
  console.log(dateCat); // 现在会输出2014/2018啦
}); 

方法2:利用链式调用(可选)

如果你想在一行里完成,也可以用链式调用,在设置值后再调用一次无参的val():

var dateCat = $(".time_value").val(dateSelected).val();

不过这种写法可读性稍差,更推荐第一种方法。

额外代码优化建议

另外,你的代码里移除选中类的操作可以更高效一些:不需要选中所有#sandbox-container span,只需要给当前点击元素的兄弟元素移除类即可,同时用addClass代替attr("class")更安全(避免覆盖原有类):

$("#sandbox-container span").on("click", function(e) { 
  // 只给当前元素的兄弟元素移除类
  $(this).siblings().removeClass("selected_year"); 
  $(this).addClass("selected_year"); 
  var dateSelected = $(this).text(); // 直接用当前元素的text,不用再查找.selected_year
  $(".time_value").val(dateSelected); 
  var dateCat = $(".time_value").val(); 
  console.log(dateSelected); 
  console.log(dateCat); 
}); 

内容的提问来源于stack exchange,提问作者rob.m

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:49:13