2015-01-20 50 views
0

我在HTML閱讀HTML陣列使用JavaScript或jQuery的

<input type="checkbox" value="Value1" name="model[settings][]"> 
<input type="checkbox" value="Value2" name="model[settings][]"> 
<input type="checkbox" value="Value3" name="model[settings][]"> 

我讀所有的HTML的輸入,其迭代和構建在JavaScript中的散列數組元素。但是這將讀取數組元素,並只選擇最後一個模型[settings] []元素。

var inputs = jQuery(" :input", "#elementID"); 

是否有jQuery中或JavaScript的方式讀取和在JavaScript然後可以被傳遞到控制器建立一個數組變量?

謝謝

+0

爲什麼您使用相同的數組名複選框?對於收音機這是可以理解的,但不是複選框 – charlietfl 2015-01-20 22:55:39

回答

2

如果我理解正確的話,你想通過你的所有input元素迭代得到他們的價值和存儲作爲一個JS對象,正確嗎? 如果是這樣的話,我會一個唯一的ID添加到我的所有的輸入,然後創建一個具有結構{ id : value }對象:

function getInputObject(sel) { 
 
    sel = $(sel); 
 
    var out = {}; 
 
    sel.each(function() { 
 
    out[$(this).attr("id")] = $(this).val(); 
 
    }); 
 
    return out; 
 
} 
 
$(document).ready(function() { 
 
    console.log(getInputObject("input")); 
 
});
input { 
 
    display: block; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<input id="input1" value="value input 1" type="text" /> 
 
<input id="input2" value="value input 2" type="text" /> 
 
<input id="input3" value="value input 3" type="text" />

+0

所以我想要使用HTML元素的名稱, 即name =「model [something]」,name =「model [settings] []」 這將構建一個迭代它時使用它的名字散列, 即data [inputs [i] .name] = inputs [i] .value; 但數組名稱具有相同的名稱並覆蓋現有值。因此data [model [settings]]在構建數據時應該是數組類型,而不是分配數據[model [settings] []]。 – ConfusedUser 2015-01-20 22:15:46

+0

在你的例子中,你的所有名字都是相同的,所以你的對象將只包含一個帶有最後一個輸入值的鍵。但是如果你的名字是這樣的:'model [settings] [smth]'和'model [settings] [smth-else]',你需要改變這一行:'out [$(this).attr(「 ()); $(this).val();'這個:out [$(this).attr(「name」)] = $(this).val();'更新我的答案以反映這個。 – Marventus 2015-01-20 22:19:14

+0

在你最後評論編輯之後,我並沒有真正遵循你想要完成的事情。我很抱歉,但你能詳細說明一下嗎? – Marventus 2015-01-20 22:26:05