`event.currentTarget.INPUT.value`如何在Meteor表单提交处理程序中给我一个输入值?

时间:2014-11-29 04:38:36

标签: meteor meteor-blaze

我发现example code从Meteor中提交的表单中获取文本输入的值。我写了own version。效果很好!这是我的表单提交事件处理程序的片段:

'submit form': function(event, template) {
  event.preventDefault();
  Assets.insert({
    name: event.target.inputName.value,
    location: event.target.inputLocation.value,
    value: event.target.inputValue.value
  });
}
  1. 我对event.target.playerName感到困惑。它是一个什么样的对象? Meteor是否为我们设置了这个对象?或者这是一个jQuery的东西?或其他什么?
  2. 使用event.currentTarget是否更好/更安全?听起来像是嵌套表格是不允许的,因此它可能没有任何区别,因为在“提交表单”事件映射键的情况下,它没有任何方法可以“冒泡”。
  3. 已转发here

3 个答案:

答案 0 :(得分:1)

在这种情况下,您不使用template对象,而是使用普通的jQ方式。通过快速查看包含示例代码的页面,他们使用function(event)而不是function(event, template)(我更喜欢后者,但这只是品味问题)。以下是如何使用template对象。

假设您的表单看起来像这样

<template name='createAccount'>   
 <form role="form">
        <input placeholder="Your Name" name="name" type="text" />
        <input placeholder="E-Mail Address" name="email" type="email" />
        <input placeholder="Password" name="password" type="password" />
        <div id="submitForm" class="outerButton">
           (SOME BUTTON)
        </div>
    </form>
</template>

此处使用template的模式:

Template.createAccount.events({
    'click #submitForm': function (event, template) {
            var displayName = template.find("input[name=name]").value;
            var eMailAddress = template.find("input[name=email]").value;
            var password = template.find("input[name=password]").value;
            < INSERT displayName, eMailAddress, password IN COLLECTION>
     }
})

答案 1 :(得分:0)

我自己也很陌生,所以我可能完全错了,但我相信你的事件目标只是标准的javascript,而不是meteor或jquery特定的。我一直认为它是创建自己的object.addEventListener()的简写,因此您的playerName将成为表单的子元素,因为它是对象的关键。

想象一下,如果设置类似form.addEventListnener('submit', function(e){ ... }),可能会让它更熟悉。

对于数字2,我不知道为什么你不能使用currentTarget。我不认为它会更安全,除非你真的不知道事件可能来自哪里(可能创建一个自定义包?)。

答案 2 :(得分:0)

  1. <linux_ip>返回DOM元素。在您的情况下,它是event.target元素,您可以使用命名属性来获取其节点,请参阅spec

  2. 在这种情况下,可以使用target或currentTarget。在其他示例中,当存在嵌套的&#39;节点,使用currentTarget可能更好。