【问题标题】:How does `event.currentTarget.INPUT.value` give me an input value in a Meteor form submit handler?`event.currentTarget.INPUT.value` 如何在 Meteor 表单提交处理程序中为我提供输入值?
【发布时间】:2015-08-17 23:33:39
【问题描述】:

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

'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 是否更好/更安全?听起来嵌套表单是不允许的,所以它可能没有任何区别,因为在给定“提交表单”事件映射键的情况下,它不会“冒泡”。

交叉发布here

【问题讨论】:

    标签: meteor meteor-blaze


    【解决方案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>
         }
    })
    

    【讨论】:

      【解决方案2】:

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

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

      至于第 2 点,如果需要,我不明白为什么不能使用 currentTarget。我认为这不会更安全,除非你真的不知道事件可能来自哪里(也许创建一个自定义包?)。

      【讨论】:

        【解决方案3】:
        1. event.target 返回 DOM 元素。在您的情况下,它是 form 元素,您可以使用命名属性来获取其节点,请参阅 spec

        2. 在这种情况下,可以使用 target 或 currentTarget。在存在“嵌套”节点的其他示例中,使用 currentTarget 可能会更好。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-01
          • 2015-08-20
          • 2019-06-20
          • 2013-08-20
          • 1970-01-01
          相关资源
          最近更新 更多