我需要發佈一個JSON字符串,其中包含來自多個選擇表單的1個或更多值的列表。在我提出的JQuery解決方案中,我得到了列表中選定的所有值,但它們作爲單獨的參數返回。如何使用來自多個選擇輸入的JQuery構建List參數?
$(document).ready(function() {
$("#fooForm").submit(function(event) {
event.preventDefault();
var $form = $(this),
loc = $form.find('input[name="location"]').val(),
url = $form.attr('action'),
keys = $('#people :selected').map(function(){return $(this).val();}).get();
$.post(url, {people:keys, location:loc},
function(data) {
$("#result").html(data);
}
);
});
});
<form id="fooForm" method="" action="/api/people/location">
<input type="hidden" name="location" value="{{location}}" />
<select id="people" multiple size=4>
<option value="{{a.key}}">{{a.name}}</option>
<option value="{{b.key}}">{{b.name}}</option>
<option value="{{c.key}}">{{c.name}}</option>
<option value="{{d.key}}">{{d.name}}</option>
</select>
<input type="submit" value="Submit" />
</form>
這將產生以下參數如果說,三個人被選中:
location 91.001,-11.23
people[] agxzdXBlcmxhcnAtc2ty_foo
people[] agxzdXBlcmxhcnAtc2ty_spam
people[] agxzdXBlcmxhcnAtc2ty_eggs
我希望那裏是包含三個鍵值單人蔘數。
UPDATE 這是我想出了最優雅的解決方案:
$(document).ready(function() {
$("#fooForm").submit(function(event) {
event.preventDefault();
var dataToBeSent = $("#fooFoorm").serialize();
var url = $("#fooForm").attr('action');
$.post(url, dataToBeSent,
function(data) {
$("#result").html(data);
}, "json"
);
});
});
<form id="fooForm" method="" action="/api/people/location">
<input type="hidden" name="location" value="{{location}}" />
<select name="people" multiple size=4>
<option value="{{a.key}}">{{a.name}}</option>
<option value="{{b.key}}">{{b.name}}</option>
<option value="{{c.key}}">{{c.name}}</option>
<option value="{{d.key}}">{{d.name}}</option>
</select>
<input type="submit" value="Submit" />
</form>
序列化更優雅。好的catch - 通過使SELECT成爲一個倍數,它會在DOM中創建多個ID。 – 2011-05-12 19:15:48