【问题标题】:Why is the value for "$(this.target).val()" (referencing an input element) "undefined"?为什么“$(this.target).val()”(引用输入元素)的值是“未定义”?
【发布时间】:2015-08-31 16:26:05
【问题描述】:

这似乎是“第 22 条军规”情况。

我已经为几个输入元素分配了“付款”类,如下所示:

<input class="payments" type="number" step="0.01" min="0" id="airfare" />

我正在响应这些元素的更改事件:

Template.templatizer.events({
      'change .payments' : function(event){
         var paymentTot = $('#paymenttotal').val();
         paymentTot = paymentTot + $(this).val();
         $('#paymenttotal').val(paymentTot);
      }
  });

...但是使用上面的代码,在将值输入到类“付款”的元素之一并模糊/退出后,我得到,“未捕获的类型错误:无法读取未定义的属性 'toLowerCase'。 ”,显然是因为我需要在 lenybernard 的回答 here 中指出的元素附加一个“.target”。

但是在这样做之后,将代码更改为:

paymentTot = paymentTot + $(this.target).val();

...虽然 确实 解决了“无法读取未定义的属性 'toLowerCase'”问题,但我在此行之后得到“未定义”作为 paymentTot 的值运行(之前是 ""):

paymentTot = paymentTot + $(this.target).val();

如何避免“无法读取未定义的属性 'toLowerCase'”并从调用事件的元素中获取值?

【问题讨论】:

  • 以上代码中toLowerCase在哪里?
  • 你想将事件对象传递给你的处理程序——你就是——然后使用event.target,而不是this.target
  • @tymeJV:我没有“toLowerCase”;当不使用带有选择元素的“.target”时,它显然会发生。有关它的血腥细节,请参阅帖子中的链接。

标签: javascript jquery meteor


【解决方案1】:

不要使用this,而是使用event,因为this 将指向函数,而target 实际上是在通过参数传递给该函数的event 对象中:

paymentTot = paymentTot + $(event.target).val();

【讨论】:

    猜你喜欢
    • 2020-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 2021-04-17
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多