У меня есть некоторый JavaScript, который ловит изменения в форме, затем звонит, постоянный клиент формы отправляют функцию. Форма является ПОЛУЧИТЬ формой (для поиска), и у меня есть много пустых атрибутов, проникает в параметрических усилителях. То, что я хотел бы сделать, должно удалить любые пустые атрибуты перед представлением, для получения более чистого URL: например, если кто-то изменяет 'подчиненный' выбор на 'английский язык', я хочу, чтобы их поисковый URL был
http://localhost:3000/quizzes?subject=English
вместо
http://localhost:3000/quizzes?term=&subject=English&topic=&age_group_id=&difficulty_id=&made_by=&order=&style=
поскольку это в данный момент. Это просто просто в целях наличия инструмента для очистки и большего количества значимого URL для соединения с и для закладок людей и т.д. Так, в чем я нуждаюсь, что-то вдоль этих строк, но это не правильно, поскольку я не редактирую фактическую форму, но объект js, сделанный из параметрических усилителей формы:
quizSearchForm = jQuery("#searchForm");
formParams = quizSearchForm.serializeArray();
//remove any empty fields from the form params before submitting, for a cleaner url
//this won't work as we're not changing the form, just an object made from it.
for (i in formParams) {
if (formParams[i] === null || formParams[i] === "") {
delete formParams[i];
}
}
//submit the form
Я думаю, что я, соглашаются с этим, но я пропускаю шаг того, как отредактировать атрибуты фактической формы, а не сделать другой объект и редактирование этим.
благодарный за любой совет - макс.
РЕДАКТИРОВАНИЕ - РЕШЕННЫЙ - благодаря многим людям, которые отправили об этом. Вот то, что я имею, который, кажется, работает отлично.
function submitSearchForm(){
quizSearchForm = jQuery("#searchForm");
//disable empty fields so they don't clutter up the url
quizSearchForm.find(':input[value=""]').attr('disabled', true);
quizSearchForm.submit();
}
Входы с атрибутом disabled
, установленным в true
, не будут отправлены вместе с формой. Так в одной строке jQuery:
$(':input[value=""]').attr('disabled', true);
Вы не сможете сделать это таким образом, если вызовете метод формы submit
; который отправит всю форму, а не массив, который вы создали для вас с помощью jQuery.
Что вы можете сделать, так это отключить пустые поля формы перед ее отправкой; отключенные поля не указываются при отправке формы. Итак, пройдитесь по элементам формы и отключите их для каждого пустого, а затем вызовите метод submit
в форме. (Если его целью является другое окно, вы затем захотите вернуться и повторно включить поля. Если его целью является текущее окно, это не имеет значения, страница все равно будет заменена.)
$('form#searchForm').submit(function() {
$(':input', this).each(function() {
this.disabled = !($(this).val());
});
});
Что ж, можно было бы отключить пустые входы перед вызовом "serializeArray"
$('#searchForm').find('input, textarea, select').each(function(_, inp) {
if ($(inp).val() === '' || $(inp).val() === null)
inp.disabled = true;
}
});
Подпрограмма "serializeArray ()" не будет включать их в свои результаты. Теперь вам может потребоваться вернуться и снова включить их, если публикация формы не приведет к полностью обновленной странице.