event.target 在事件中未定义

Posted

技术标签:

【中文标题】event.target 在事件中未定义【英文标题】:event.target is undefined in events 【发布时间】:2015-08-01 07:11:00 【问题描述】:

如何在events 中使用each 输入值?希望我下面的代码能很好地解释你。

html

<template name="UpdateAge">
    #each Name
    <div data-action="showPrompt">
       <div>
          Some content
       </div>

       <div>
         <div>
            Some content
         </div>
       </div>
       <div>
           Name : name
           Age : <input type="text" name="age" value="age"/> //I need to access age values in event
       </div>
    </div>
/each
<template>

JS:

Template.UpdateAge.events(
  'click [data-action="showPrompt"]': function (event, template) 
        console.log(event.target.age.value); // TypeError: event.target.age.value is undefined
  
);

我不知道我的方法是否适合将参数值传递给events,因此欢迎提出建议。

【问题讨论】:

好吧,您的错误消息并没有说 event.target 未定义,是吗?然而,几乎没有任何目标拥有.age 属性,因此访问.value 会抛出异常。 是的,&lt;div&gt; 并不会因此而神奇地获得.age 属性。 【参考方案1】:

您使用的符号仅对表单元素有效,并且当 event.target 是表单元素时。

event.target.age.value

event.target 是事件发生的元素,event.currentTarget 是附加了事件处理程序的元素

如果您将div 替换为form 并将target 替换为currentTarget,那么它将起作用

event.currentTarget.age.value

here a fiddle 使用您的代码

【讨论】:

我将div 更改为form,但出现同样的错误。我认为没有提交表格。就我而言,我没有提交按钮。 event.target 是您单击的元素。所以如果点击输入框 event.target 是输入框,不是表单。表单元素将是currentTarget 谢谢,对我来说最好的方法,效果很好。这救了我的命:)【参考方案2】:

如果事件绑定在容器 div 上,则应从目标搜索输入,因为event.target 将为您提供事件附加到的元素。

要访问 div 中的任何值,您必须首先访问该元素,然后使用该元素的属性来访问所需的任何内容 - 在本例中为 .value

【讨论】:

以上是关于event.target 在事件中未定义的主要内容,如果未能解决你的问题,请参考以下文章

e.target与事件委托简例

event.target.可以获取啥属性

event.target与event.srcElement

上传文件事件并校验:event.target.files && event.target.files[0]

event.target指向谁?

jquery 事件