2014-02-28 45 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

嗨賈森自@大衛沃爾頓的答案適合你,你爲什麼不去並將其標記爲接受的答案,以便任何稍後閱讀此帖的人都知道該在哪裏看。 –