Вы можете получить параметры строки запроса, используя метод serializeArray()
.Затем используйте reduce()
для группировки значений параметров по имени и map()
для получения массива пар ключ-значение.Затем можно объединить пары, разделенные &
, используя метод join()
.Например, следующий фрагмент создает целевой URL-адрес, используя фактическое значение формы action (текущий URL-адрес по умолчанию) и значения отмеченных флажков:
$('form').submit(function() {
var queryString = $(this).serializeArray()
.reduce(function(transformed, current) {
var existing = transformed.find(function(param) {
return param.name === current.name;
});
if (existing)
existing.value += (',' + current.value);
else
transformed.push(current);
return transformed;
}, [])
.map(function(param) {
return param.name + '=' + param.value;
})
.join('&');
var action = $(this).prop('action');
var delimiter = (~action.indexOf('?')) ? '&' : '?';
$(this).prop('action', action + delimiter + queryString);
// Only for display result. Remove on real page.
var url = $(this).prop('action');
console.log(url);
return false;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form method="GET">
<input type="checkbox" name="anythingOne" value='one'>
<input type="checkbox" name="anythingOne" value='two'>
<input type="checkbox" name="anythingOne" value='three'>
<input type="checkbox" name="otherThingTwo" value='Forty'>
<input type="checkbox" name="otherThingTwo" value='Fifty'>
<button type="submit">Show target URL</button>
</form>
Последние 3 строки используются только для предотвращения отправки формы и отображения приведенного URL.
Также можно решить вопрос, используятолько serialize()
выражения и регулярные выражения, но для этого требуется поддержка утверждений в браузерах.