如何从流星中的提交事件中获取输入ID?

时间:2014-09-09 09:57:10

标签: javascript html node.js meteor

在一个模板中,我有:

    <template name="moviesTemplate">
     <form>
       <ul>
         {{#each movies}}
           <li>
             {{title}} <input id="{{title}}" type="submit" value="Delete" />  
           </li> 
         {{/each}}
      </ul>
    </form>
    </template> 

当用户点击moviesTemplate上的Delete时,我想在我的javascript文件中的事件中找到input元素的id属性:

Template.moviesTemplate.events = {
    'submit': function (e, tmpl) {
        e.preventDefault();
        var theId = theButtonThatRaisedTheEvent.id.toString();  // <--- This is what I'm referring to

     }
 }

我如何找到这个元素?我以为它是'e',但我似乎无法得到任何Id。也许我误解了......

编辑1:

好的,似乎'e'似乎是事件,它不包含任何与源元素相关的信息。我怎么回事呢?我是否需要重新思考我是如何做到的?

4 个答案:

答案 0 :(得分:2)

对我而言,听起来id属于表单,而不是提交按钮。我会使用以下内容:

<template name="main">
    <form data-id="anId">
        <input type="submit" value="Delete!">
    </form>
</template>
Template.main.events({
    'submit form': function(event, template){
        event.preventDefault() // Don't submit it!
        var id = event.currentTarget.getAttribute('data-id') // Get the id attribute.
        console.log(id)
    }
})

<强>更新

替换您现在拥有的模板:

<template name="moviesTemplate">
    <ul>
        {{#each movies}}
            <li>
                <form data-id="{{title}}">
                    {{title}} <input type="submit" value="Delete" />  
                </form>
            </li> 
        {{/each}}
    </ul>
</template>

并使用此帖子中先前编写的事件处理程序。

实际上,事件处理程序中的this将是影片的上下文,因此处理程序可以简单地为:

Template.main.events({
    'submit form': function(event, template){
        event.preventDefault() // Don't submit it!
        var id = this.title // Get the title through the context.
        console.log(id)
    }
})

所以不需要在表单上使用data-id属性。

答案 1 :(得分:1)

不幸的是;它并不那么简单。

起点是similar to this answer但是你可能想要处理类似&#34;输入&#34;键被按下元素

Template.moviesTemplate.events = {
    'click input[type=submit]': function(e, tmpl){
       tmpl.find('input[type=submit]').data('clicked',false);
       $(e.currentTarget).data('clicked',true);
    },
    'submit': function (e, tmpl) {
        e.preventDefault();
        var theId = tmpl.find('input[type=submit]').filter(function(i,ele){
          return $(ele).data('clicked');
        }).get(0).attr('id');    
     }
}

答案 2 :(得分:0)

使用tmpl.find并抓住id

Template.moviesTemplate.events = {
     'submit':function(e, tmpl){
         e.preventDefault();
      },
     'click input[type="submit"]':function(e, tmpl){
         console.log(e.currentTarget.id)
     }
 }

Proof

答案 3 :(得分:0)

您可以创建单个提交表单事件,并有条件地检查事件目标字段。根据您插入的集合调用适当的Meteor方法。

Template.detailsViewTemplate.events({
    'submit form': function(ev){
        ev.preventDefault();

        var detail_input_field = template.$('#detail_entry');
        var message_input_field = template.$('#message_entry');

        if(detail_input_field != undefined){
            var detailFormData = {
            detail: $(ev.target).find('[name = detail]').val(),
            parentId: $(ev.target).find('[name = parentId]').val(),
            checkboxStatus: ''
            }

            Meteor.call('addDetail', detailFormData);
            $('.form-group').children().val('');

        } else if(message_input_field != undefined){
            var newMessageData = {
                listId: this.params_id,
                message: $(ev.target).find('[name = message]').val()
            }
            Meteor.call('addMessage', newMessageData);
            $('.form-group').children().val('');
        }
    }
}