2013-10-15 57 views
1

首先,我很難制定我的標題,所以我很抱歉。 無論如何,在我的問題。使用jQuery選擇器,多個選擇字段獲取表單的值

我有一個很大的信息表,其中一些單元格有表單域,特別是每行有兩個表單域。在行的末尾,我有一個「保存」鏈接。

有多行,每行有自己的一組字段。

我很難得到這兩個值存儲在一個變量,因爲它們是動態呈現的,我沒有一個特定的ID連接到每個。

因此,我認爲遍歷DOM向上會讓我的結果,但沒有,到目前爲止,我只得到「未定義」(我認爲我在正確的道路上,我只是無法弄清楚) 。

以此代碼爲例;

<td> 
<select multiple="multiple" name="paintings"> 
<option value="The Persistance of Memory" selected="selected">The Persistance of Memory</option> 
<option value="The Great Masturbator" selected="selected">The Great Masturbator</option> 
<option value="The Scream">The Scream</option> 
</select> 
</td> 
<td> 
<select name="painters"> 
<option value="VanGogh" selected="selected">Van Gogh</option> 
<option value="Dali">Dali</option> 
<option value="Munch">Munch</option> 
</select> 
</td> 
<td> 
<a href="#">Save</a> 
</td> 

當用戶點擊保存時,所選的值應該存儲在一個變量中。 這是我迄今爲止所嘗試過的;

$("a").click(function (e){ 
    str = $(this).find("select[name|='painters']").val() || []; 
    alert(str.join(",")); 

而不是「找」,我也試過「父」,「先行」和「最接近」。 我也嘗試指定選擇器「選擇選項:選中」。

這適用於獲得所有元素或只是一個單一的,但當我試圖找到最接近的兩個,並將其存儲在兩個不同的variabels它不會工作。

偉大的任何意見或幫助。謝謝。

回答

1

您可以使用.map()獲得值的數組:(你不工作,因爲find()將遍歷DOM樹,在這裏,你需要回到到tr,然後從那裏find

$("a").click(function (e) { 
    var selectValues = $(this).closest("tr").find("select").map(function() { 
     return this.value; 
    }).get(); 
}); 

雅的小提琴! http://jsfiddle.net/5tLxk/

編輯:既然你有multi-select,你可以嵌套另一個map在那裏得到的所有值(小提琴:http://jsfiddle.net/5tLxk/1/)當然

$("a").click(function (e) { 
    var selectValues = $(this).closest("tr").find("select").map(function() { 
     return $(this).find("option:selected").map(function() { 
      return this.value; 
     }).get(); 
    }).get(); 

    console.log(selectValues); 
}); 
+0

啊,! 我真的很難掌握所有不同功能的鏈接概念。感謝您的幫助 - 現在它完全有意義。祝你有美好的一天。 – dojs

相關問題