Arhn - архитектура программирования

Массив переключателей (HTML)

Если у меня есть два ввода текста типа с одинаковым именем, например:

<input type="text" name="task" id="task1" value="begin">
<input type="text" name="task" id="task2" value="end">

Когда я отправляю форму, task автоматически отправляется в виде массива (task[0]='begin', task[1]='end'). Это очень полезно по многим причинам, например, мне не нужно беспокоиться о сериализации результата, я могу использовать сортировку для повторной сортировки, и когда я отправляю ее, она уже находится в правильном порядке.

Но если я хочу использовать переключатели, мне уже нужно использовать несколько входов с тем же именем.

Есть ли способ сохранить эту функциональность с помощью переключателей?


Например:

<input type="text" name="task" id="task1" value="begin">
<input type="radio" name="time" id="time11" value="early" checked="checked">
<input type="radio" name="time" id="time12" value="noon">
<input type="radio" name="time" id="time13" value="late">

<input type="text" name="task" id="task2" value="end">
<input type="radio" name="time" id="time21" value="early">
<input type="radio" name="time" id="time22" value="noon" checked="checked">
<input type="radio" name="time" id="time23" value="late">

Я хочу, чтобы при отправке я получал time[0]='early' и time[1]='noon'

24.07.2012

  • Зачем тебе это надо? Вы знаете значения своих переключателей. И если бы вы отправили все значения, как бы вы узнали, какое из них выбрано? 24.07.2012
  • не совсем понял ваш вопрос, но добавил образец. 24.07.2012
  • какой язык сервера вы используете? 24.07.2012
  • это asp.net mvc, но я считаю, что задача[0]/задача[1] работает и для js/dom 24.07.2012
  • Вам нужен <select>, а не список переключателей. 24.07.2012
  • Я знаю, что мог бы использовать выбор... 24.07.2012
  • Я не уверен, почему этот вопрос был закрыт. Мне кажется, что здесь есть правильный вопрос: HTML будет отправлять текстовые вводы с тем же именем в сериализацию массива. Радиовходы требуют того же имени, чтобы связать группу радиокнопок. Можно ли сериализовать ответы радиокнопки в виде массива, аналогичного тому, что происходит с вводом текста? +1, чтобы снова открыть. 24.07.2012

Ответы:


1

Попробуй это:

<input type="text"  name="task[0]" id="task1"  value="begin">
<input type="radio" name="time[0]" id="time11" value="early" checked="checked">
<input type="radio" name="time[0]" id="time12" value="noon">
<input type="radio" name="time[0]" id="time13" value="late">

<input type="text"  name="task[1]" id="task2"  value="end">
<input type="radio" name="time[1]" id="time21" value="early">
<input type="radio" name="time[1]" id="time22" value="noon" checked="checked">
<input type="radio" name="time[1]" id="time23" value="late">

Тогда вы получите: task[0]=begin, time[0]=early, task[1]=end и time[1]=noon.

24.07.2012
  • Если вы не хотите использовать «начало» и «конец», используйте любую строку, которую хотите. Просто поместите ключ в квадратных скобках в свойство имени. 24.07.2012
  • Это зависит от алгоритма разбора формы PHP. Я не думаю, что ASP.NET придает особое значение символам [ и ] в именах данных формы. 24.07.2012
  • @Quentin, если ASP.NET изначально не обрабатывает это как массив, у вас все равно будет уникальное свойство в виде строки time[start]. Таким образом, код все равно будет работать, даже если он не будет доступен как собственный массив. 24.07.2012
  • @kingjeffrey - Верно, но вопрос в том, чтобы получить собственный массив автоматически. 24.07.2012
  • @Quentin, и ОП уже упоминал, что он получал собственный массив из текстовых полей, поэтому следует предположить, что он использует язык сценариев на стороне сервера (например, PHP), который обрабатывает это так, как ожидается в этом ответе. 24.07.2012
  • @kingjeffrey — Это потому, что каждый синтаксический анализатор форм, который я видел (кроме одного в PHP, который зависит от специальных соглашений об именах, которые обычно доставляют неудобства, но весьма полезны в этом крайнем случае), представляет несколько фрагментов данных с помощью то же имя, что и массив. Однако, поскольку цель состоит в том, чтобы получить массив из множества групп переключателей, вы не можете этого сделать, поскольку присвоение им одного и того же имени делает их частью одной и той же (одной) группы. 24.07.2012
  • получение массива является частью цели, я также хочу решить ее правильно, например, связать task[0] с time[0] 24.07.2012
  • @Quentin, это должно работать независимо. Если обрабатываться как массив, каждое радио будет хранить свое значение для указанного ключа в массиве «имя». Если они обрабатываются как строка, они являются теми же строками для связанных переключателей. Не уверен, в чем проблема, которую вы видите. 24.07.2012
  • @ariel, затем используйте name="time[0]" и name="time[1]". Как я уже сказал в комментарии выше, вы можете установить ключ на любую выбранную вами строку, включая 0 или 1. 24.07.2012
  • @ariel, если уж на то пошло, вы можете явно указать name="task[0]" и name="task[1]" и для ввода текста, чтобы они не рассинхронизировались. 24.07.2012
  • @ariel, я обновлю ответ, чтобы явно показать, как это можно сделать. 24.07.2012
  • я вижу ваше редактирование, но прочитал вопрос. Это очень полезно по многим причинам, например, мне не нужно беспокоиться о сериализации результата, я могу использовать сортировку для повторной сортировки, и когда я отправляю, он уже в правильном порядке . 24.07.2012
  • да, я знаю, все, что мне нужно, это js для повторного обновления индексов, но 24.07.2012
  • @ariel, единственный способ иметь сериализованный массив в переключателях, где несколько входов имеют одно и то же имя, - это явно принудительно сериализовать. Этого не может произойти, если вы не укажете значение ключа. Так что, возможно, ответ, который вы ищете, таков: вы не можете делать это автоматически. Но я подумал, что лучше показать вам, как вы можете сделать это вручную. 24.07.2012
  • @kingjeffrey — если у вас есть name="foo[0]" и name="foo[1]", тогда PHP предоставит вам массив результатов публикации, содержащий вложенный массив с именем foo, но все остальное даст вам массив результатов публикации, содержащий foo[0] и foo[1]. Вы не получаете специальный массив foo (это то, что задает вопрос). 24.07.2012
  • @ Квентин, в вопросе он просит не буквальный массив, а сериализацию массива. HTML (обрабатываемый всеми браузерами) будет публиковать сериализацию массива независимо от того, как эта сериализация обрабатывается сценарием на стороне сервера. Ваша забота непоследовательна. 24.07.2012
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..