Удалите пустые значения из параметрических усилителей формы прежде, чем отправить его

У меня есть некоторый 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();
}
29
задан Max Williams 10 March 2010 в 16:57
поделиться

4 ответа

Входы с атрибутом disabled, установленным в true, не будут отправлены вместе с формой. Так в одной строке jQuery:

$(':input[value=""]').attr('disabled', true);
29
ответ дан 28 November 2019 в 01:24
поделиться

Вы не сможете сделать это таким образом, если вызовете метод формы submit ; который отправит всю форму, а не массив, который вы создали для вас с помощью jQuery.

Что вы можете сделать, так это отключить пустые поля формы перед ее отправкой; отключенные поля не указываются при отправке формы. Итак, пройдитесь по элементам формы и отключите их для каждого пустого, а затем вызовите метод submit в форме. (Если его целью является другое окно, вы затем захотите вернуться и повторно включить поля. Если его целью является текущее окно, это не имеет значения, страница все равно будет заменена.)

{{ 1}}
4
ответ дан 28 November 2019 в 01:24
поделиться
$('form#searchForm').submit(function() {
    $(':input', this).each(function() {
        this.disabled = !($(this).val());
    });
});
18
ответ дан 28 November 2019 в 01:24
поделиться

Что ж, можно было бы отключить пустые входы перед вызовом "serializeArray"

$('#searchForm').find('input, textarea, select').each(function(_, inp) {
  if ($(inp).val() === '' || $(inp).val() === null)
    inp.disabled = true;
  }
});

Подпрограмма "serializeArray ()" не будет включать их в свои результаты. Теперь вам может потребоваться вернуться и снова включить их, если публикация формы не приведет к полностью обновленной странице.

3
ответ дан 28 November 2019 в 01:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: