【问题标题】:Meteor handle multiple input with same name流星处理具有相同名称的多个输入
【发布时间】:2016-03-06 05:22:10
【问题描述】:

如何在流星中处理多个具有相同名称的输入值并期望来自事件的数组。

<input type="text" class="form-control valid" id="companyEmail" name="companyEmail[]">

【问题讨论】:

    标签: html forms meteor meteor-blaze


    【解决方案1】:

    到目前为止,在 Blaze 模板中确定事件范围的最简单方法是在您需要捕获事件的级别定义模板。

    如果你有:

     <template name="companyEmails">
     {{#each companyEmail}}
       <input type="text" class="form-control valid" id="companyEmail" name="companyEmail[]">
     {{/each}}
     </template>
    

    然后,如果您将事件处理程序附加到 companyEmails 模板,您必须确定哪个 input 已更改。

    如果您将此模式更改为:

     <template name="companyEmails">
     {{#each companyEmail}}
       {{> oneCompanyEmail}}
     {{/each}}
     </template>
    
     <template name="oneCompanyEmail">
     <input type="text" class="form-control valid" id="companyEmail" name="companyEmail[]">
     </template>
    

    然后您可以将事件处理程序附加到较低级别的模板,并保证您在具有适当数据上下文的正确对象上获得正确事件:

     Template.oneCompanyEmail.events({
       'input #companyEmail': function(ev,err){
         var emailAddress = ev.target.value;
         console.log(this); // will be the value of companyEmail from the #each
       }
     });
    

    【讨论】:

    • 您的代码部分不正确,因为您不能在同一页面上多次使用相同的id
    • 从 OP 复制了该模式。你说得对,这里唯一的 ID 会更好,例如 id={{this._id}}
    【解决方案2】:

    与 Meteor 中的往常一样,您可能在模板范围内工作并动态创建这些输入。

    如果是这种情况,您需要为输入创建一个事件处理程序,然后使用“this”捕获并发使用的输入,这是一个示例:

    html 文件:

    <template name="emailForm">
      {{#each item in items}}
        <input name="email" class="email" placeholder="enter email address">
        <button class="addEmail">+</button>
      {{/each}}
    </template>
    

    在你的 js 文件中:

    if(Meteor.isClient) {
      Template.emailForm.events({
        'click .addEmail': function(event) {
          console.log(this);
        }
      });
    }
    

    查看“this”的结果,并了解如何提取所需的数据位,因为它仅代表单击的项目。

    【讨论】:

    • 实际上,表单还包含其他输入,并且我正在处理超出模板范围的电子邮件,在这种情况下可以吗?
    • 自从我开始使用 Meteor 以来,我只在模板中工作。路由和模板的学习曲线很短,一旦掌握,就没有理由在模板之外做任何事情。这很难接受,但在某种程度上不在模板中工作会错过许多可能让您首先选择 Meteor 的功能和功能。但是,当然,每个人都有自己的喜好......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    • 2014-11-28
    • 2017-07-11
    • 2022-07-13
    • 1970-01-01
    相关资源
    最近更新 更多