Подтвердить что ты не робот

Каков наилучший подход к HTML, когда входные данные формы распространяются по всей странице?

Я создаю фасетную поисковую систему, в которой есть входы на боковой панели (грани указаны флажки) и ввод в заголовке страницы (основное окно запроса). Все эти входы передаются одновременно, когда пользователь отправляет запрос.

Единственный способ, которым я могу придумать эту работу, - обернуть всю страницу в тег формы HTML. Что-то вроде следующего псевдо-html:

<form>
  <div id='header'>
    <logo/>
    <input id='q'/>
    <!-- a bunch more stuff -->
  </div>
  <div id='sidebar'>
    <div id='sidebar-facets-subsection'>
      <input id='facet1'/>
      <input id='facet2'/>
      <input id='facet3'/>
      <!-- a bunch more stuff -->
    </div>
    <div id='sidebar-form-subsection'>
      <form id='unrelated-form'>
        <input id='unrelated-input-1'/>
        <input id='unrelated-input-2'/>
      </form>
    </div>
  </div>
  <!-- a bunch more stuff -->
</form>

Это будет работать, за исключением трех вещей:

  • Мне нужно использовать другие формы на странице, как я указал выше.
  • Я использую разные шаблоны django для создания заголовка и боковой панели, что делает шаблоны зависимыми друг от друга.
  • Это настоящий беспорядок, поскольку на боковой панели в действительности находится около 100 строк, а не три.

Есть ли более умный способ сделать это, о котором я не знаю, или создает огромные HTML-формы в норме? В таких обстоятельствах, лучше ли использовать Javascript для генерации входных записей в более нормальной форме? Или это единственный вариант?

Любые творческие решения или идеи?

4b9b3361

Ответ 1

Вы можете заставить его работать с Javascript, не жертвуя при этом

  • Поместите все флажки в заголовок и заверните их в div
  • Настройка и пустая, но чистая боковая панель
  • Используя Javascript, переместите флажки из заголовка в боковую панель.
  • Прикрепите обратный вызов к событию form.submit, и когда пользователь отправит форму, отмените это событие, возьмите данные из поля поиска и флажков и отправьте их как запрос AJAX POST.

Используя фреймворк вроде jQuery, он занимает 15 минут.

Если пользователь имеет JS, форма отправит запрос, и все будет работать. Если у пользователя нет разрешения javascript, флажки будут в заголовке, поэтому они будут работать по цене чуть менее элегантного дизайна.

Но люди с отключенным Javascript используются для разработки изменений, так что это нормально.

Ответ 2

Использовать javascript для заполнения скрытого поля с помощью списка этих флажков name=value пар в форме submit и обрабатывать это по серверному коду, разделяя строку на массив и т.д. Обратите внимание, что это не очень хорошо, так как вы теряете доступ к тем, у кого отключен JavaScript. Тег формы - единственный доступный способ сделать это.

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

Ответ 3

Я считаю, что у вас есть два варианта:

1.) элемент формы в виде страницы. Все кнопки "отправить" отправляются в ту же форму, и серверная сторона script обрабатывает форму для всех заполненных элементов. По ширине страницы, я не являюсь буквальным... Связанные входы все в одном теге формы. Другие формы помещаются в теги другой формы.

2.) несколько форм с клиентской стороной script, которая заполняет поля скрытой формы данными из другой формы перед отправкой.

1 требуется больше работы, но 2 может не работать для каждого посетителя.

Учтите тот факт, что только потому, что у вас есть один контейнер форм, вам не обязательно обязательно отображать все вместе для пользователя. Инкапсулируйте входы в div и поместите их в соответствии с вашей волей. Это может быть нелегко, но это определенно возможно.