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

如何在keyup事件调用的函数中访问$(this).closest('tr')

解决方法

问题核心是函数calculateInvestmentTypeFirstRowTotal里的this指向错误:直接调用函数时,this默认指向全局对象(浏览器环境下为window),而非触发keyup事件的输入框元素。以下两种方式可修复该问题:

方式一:将当前元素作为参数传入函数

修改事件绑定逻辑,把触发事件的输入框元素作为参数传给目标函数,函数内直接使用该参数定位父级tr:

$("#Year1_1").keyup(function () {
   calculateInvestmentTypeFirstRowTotal($(this));
});

function calculateInvestmentTypeFirstRowTotal($input) {
   var sum = 0;
   $input.closest('tr').find("input").each(function (index, tr) {
      if (index != 0) {
         if (!isNaN(parseInt(this.value))) {
            sum = sum + parseInt(this.value);
         }
      }
      if (index != 11) {
         $("#Total_1").val(sum);
      }
   });
}

方式二:用call改变函数内this指向

调用函数时使用call方法,将事件回调里的this(即触发事件的输入框)绑定到目标函数的this上,保持上下文一致:

$("#Year1_1").keyup(function () {
   calculateInvestmentTypeFirstRowTotal.call(this);
});

function calculateInvestmentTypeFirstRowTotal() {
   var sum = 0;
   $(this).closest('tr').find("input").each(function (index, tr) {
      if (index != 0) {
         if (!isNaN(parseInt(this.value))) {
            sum = sum + parseInt(this.value);
         }
      }
      if (index != 11) {
         $("#Total_1").val(sum);
      }
   });
}

两种方案均可解决问题,方式一的参数传递逻辑更直观,后续复用函数时更容易理解参数作用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:20:28