2014-02-28 115 views
2

试图找出一种方法来此,这里的代码,在一个模板,我有:如何从模板中获取多个select(ed)列表值?

<template name="main"> 
    <select name="foo" multiple> 
    {{each users}} 
    {{>userinfo}} 
    {{/each}} 
    </select> 
    <button type="submit" value="Submit">Add to team</button> 
</template> 

<template name="userinfo"> 
    <option value={{_id}}>{{username}}</option> 
</template> 

使创建多个可选列表,但如何在我的流星JS代码如何获得这些多个值和跟他们做点什么?我知道我可能会做的Template.main.events的东西,但我卡住了,我知道在纯JQuery的我会做这样的事情:

var users = []; 
$('#foo :selected').each(function(i, selected){ 
    users[i] = $(selected).text(); 
}); 

只是不知道如何实现此在流星事件

回答

4

如果你换一个<form></form>内的元素,那么你就可以赶上submitevent像这样:

Template.main.events({ 
    submit: function() { 
    // jquery code here to extract the values 
    return false; 
    } 
}); 

之前return false(所以该事件不会冒泡并刷新该页面),您可以使用您的jQuery代码来提取ID。


另外,如果你不想使用表单你可以听按钮本身click事件:

Template.main.events({ 
    'click #add-to-team': function() { 
    // jquery code here to extract the values 
    } 
}); 
+0

是否有必要将它包装在

的标签?为什么我不能在没有表单标签的情况下执行提交事件? –

+0

在流星谈谷歌集团已经讨论过这个问题。看起来很多人已经放弃了表单标记,因为它们代表了请求/响应模型,而流星使用了反应模型,例如,您可以在字段输入的键控上更新字段。因此,也许你应该更新你的答案,以反映这样的事实,即人们可以抓住任何*事件*并做任何他们想要的事情,事件不受限制,甚至不需要形成事件。 –

+0

所以我不需要它呢?我不能只是为了这个事件,而是像'点击提交'这样的东西呢? –

1

知道了,所有我所要做的就是像so:

Template.main.events({ 
    'click #addToTeam' : function() { 
    var array_of_values = $('#foo').val(); 
    //do something with array_of_values 
    } 
}); 
+0

嗨贾森自@大卫沃尔顿的答案适合你,你为什么不去并将其标记为接受的答案,以便任何稍后阅读此帖的人都知道该在哪里看。 –