2014-06-05 47 views
0

我有一個表單,其中包含來自服務器的文件名和複選框,它們已經預填充。我的表單應該更新複選框。填充JavaScript鍵值對

我有JavaScript代碼,選擇行並嘗試用每行中複選框的更新值構建鍵值對象。

當選擇器被設置爲僅返回被選中的字典時,字典會完美地構建,但我也想添加到字典中可能已被勾選的條目。

當我讓選擇器選擇所有的行(包括檢查屬性未定義的地方),那麼字典根本不會被填充。

這裏是我的輸入元素:

<input type="checkbox" name="Map" data-id="@file.FileId" checked="checked" class="auto-accept-checkbox" /> 

這裏是JavaScript代碼段:

var map = {}; 

$("#shareable-file-settings-form table tr").each(function() { 
    map[$(this).attr('data-id')] = $(this).attr('checked') === 'checked'; 
}); 

我已經在控制檯項目試圖通過項目我右手的操作數表達的作品有!我不知道爲什麼那樣子會胡作非爲一樣,(沒有放置任何東西,在字典中)在選擇器被修改

來自:

"#shareable-file-settings-form table tr :checked" 

到:

"#shareable-file-settings-form table tr" 
+0

它不工作,因爲你選擇'tr'元素不能有'checked'財產,哪些可能沒有'數據id'集。你的第一個選擇器正在工作,因爲它選擇的複選框是你的'tr's的子項。嘗試'#shareable-file-settings-form table tr input [type =「checkbox」]'作爲選擇器。 – Joe

回答

3

像喬說,您正在選擇tr元素,而不是input[type=checkbox]裏面。第一,進一步您的選擇更改爲

"#shareable-file-settings-form table tr input[type=checkbox]" 

,在複選框的「選中」屬性是一個HTML屬性,而不是一個屬性。另外,您可以使用jQuery的.data()方法來訪問id數據屬性。

你可以把它改成

map[$(this).data('id')] = $(this).prop('checked');