2009-09-22 73 views

回答

1
var ids = $("select.classname > option:selected").map(function(n, i) { 
    return $(n).val(); 
}).join(","); 

爲了解釋那是什麼做的:

  1. 首先,它選擇了給定的下拉列表中的所有選擇的選項(通過「類名」標識);
  2. 它將每個選定的選項傳遞給回調函數;
  3. 該回調函數返回所選選項的值;
  4. 因爲您在所選選項的數組上調用了map,所以您現在使用map()方法獲得了一組值;
  5. join()函數將該數組轉換爲逗號分隔列表。

例如:

<select class="classname"> 
    <option value="1">One</option> 
    <option value="2" selected>Two</option> 
    <option value="3" selected>Three</option> 
</select> 
<select class="classname"> 
    <option value="4">Four</option> 
    <option value="5" selected>Five</option> 
</select> 

首先使用$()構造的選擇的選項(2,3和5),映射屬性的值成{2,3,5}陣列,然後將它們加入到jQuery對象用逗號分隔的字符串"2,3,5"

+0

你能解釋一下這裏發生了什麼嗎?怎麼了在$()裏面的synatx?我將循環jQuery文檔中的.map文件...什麼是n和i? – BigOmega 2009-09-22 02:02:11

+0

woa - 那太瘋狂了......我仍然很難接受一件事:什麼時候該函數被傳入.map()實際調用?以及它被稱爲多少次?否則這是有道理的,這很漂亮。 – BigOmega 2009-09-22 02:12:01

+0

傳遞給map()的函數是一個回調函數。每匹配元素被調用一次。請參閱http://docs.jquery.com/Traversing/map – cletus 2009-09-22 02:17:32

1

似乎cletus提出的答案有兩個問題需要解決我的jQuery版本(1.6.2)。下面的代碼對我來說是正確的,並且在針對cletus'post中的示例HTML使用時警告「3,5」。請注意,它發現最後選定的選項,而不是從第一個HTML選擇塊中選擇的選項。

var ids = $("select.classname > option:selected").map(function(n, i) { return $(i).val() }).toArray().join(","); 

alert(ids); 

首先,它在地圖函數回調中使用了錯誤的參數。我需要改變Ñreturn $(n).val() VS return $(i).val()

其次,它返回該所需要的陣列的方法「加入」之前被轉換成一個陣列,可以使用一個jQuery對象:.toArray().join(",")

一旦這兩個小的修改,cletus的答案在jQuery 1.6.2中完美地爲我工作