如何在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
相关产品推荐
相关产品推荐

