Nano Hash - криптовалюты, майнинг, программирование

Javascript для выбора нескольких вариантов

У меня есть форма с полем выбора, которое допускает несколько вариантов. После того, как пользователь сохраняет эти параметры, он сохраняет их в таблице базы данных.

Затем я могу прочитать эту таблицу базы данных, чтобы снова получить варианты, которые они выбрали. Мне нужно иметь возможность извлекать эти данные из базы данных, помещать их в массив, а затем иметь параметры в этом поле выбора, которые будут предварительно выбраны, когда они переходят к «Редактировать» свои параметры.

Чтение данных в массив в порядке, и я знаю, как сделать один параметр выбранным в поле выбора, однако я не уверен, как обрабатывать несколько параметров, выбранных в javascript.

Может ли кто-нибудь помочь мне понять, что для этого требуется javascript?


Ответы:


1

Решение на чистом javascript

<select id="choice" multiple="multiple">
  <option value="1">One</option>
  <option value="2">two</option>
  <option value="3">three</option>
</select>
<script type="text/javascript">

var optionsToSelect = ['One', 'three'];
var select = document.getElementById( 'choice' );

for ( var i = 0, l = select.options.length, o; i < l; i++ )
{
  o = select.options[i];
  if ( optionsToSelect.indexOf( o.text ) != -1 )
  {
    o.selected = true;
  }
}

</script>

Хотя я согласен, что это должно быть сделано на стороне сервера.

18.08.2009
  • Это близко, однако сохраненные значения не являются индексом параметров, а являются значениями параметров. 18.08.2009
  • Стоит отметить, что Array.prototoype.indexOf не было доступно в IE до версии 9. 29.04.2013
  • Большое спасибо. Я буду использовать его с o.value вместо o.text, но он работает хорошо. 17.02.2017
  • Привет, не могли бы вы немного объяснить свою петлю, я не совсем понимаю 17.03.2017
  • Не могли бы вы опубликовать jsfiddle, пожалуйста, я думаю, что делаю то же самое, но это не сработает 17.03.2017

  • 2

    Этот тип вещей должен выполняться на стороне сервера, чтобы ограничить количество ресурсов, используемых на клиенте для таких тривиальных задач. При этом, если вы будете делать это на внешнем интерфейсе, я бы посоветовал вам рассмотреть возможность использования чего-то вроде underscore.js чтобы код оставался чистым и лаконичным:

    var values = ["Red", "Green"],
        colors = document.getElementById("colors");
    
    _.each(colors.options, function (option) {
        option.selected = ~_.indexOf(values, option.text);
    });
    

    Если вы используете jQuery, это может быть еще короче:

    var values = ["Red", "Green"];
    
    $("#colors option").prop("selected", function () {
        return ~$.inArray(this.text, values);
    });
    

    Если бы вы делали это без таких инструментов, как underscore.js или jQuery, вам пришлось бы написать немного больше, и это может оказаться немного сложнее:

    var color, i, j,
        values = ["Red", "Green"],
        options = document.getElementById("colors").options;
    
    for ( i = 0; i < values.length; i++ ) {
        for ( j = 0, color = values[i]; j < options.length; j++ ) {
            options[j].selected = options[j].selected || color === options[j].text;
        }
    }
    
    18.08.2009
  • У меня уже есть форма выбора, я больше искал решение javascript для автоматического выбора. В любой другой части формы используется javascript, я просто не знаю, как выбрать несколько параметров с помощью кода javascript. 18.08.2009
  • Выполнение этого на стороне сервера имеет больше смысла, и вы все равно в конечном итоге создадите массив на стороне сервера для кода на стороне клиента. 18.08.2009
  • Серверная часть имеет больше смысла, но я не хочу переделывать все, что уже сделано. Предыдущий разработчик использовал весь javascript, так что я просто буду придерживаться его для этого. 19.08.2009
  • JS здесь можно упростить, и есть ошибка — значения HTML пишутся с заглавной буквы, а выбранная переменная — нет, то есть этот код ничего не выберет. Исправленная версия: jsfiddle.net/b9chris/RZT72 29.04.2013
  • @ChrisMoschini Этому ответу много лет, но я рад снова поднять его на поверхность, чтобы обновить его содержание. Тоже неплохое решение, хотя можно сделать еще короче :) См. мой ответ выше. 29.04.2013

  • 3

    Основываясь на ответе @Peter Baley, я создал более общую функцию:

       @objectId: HTML object ID
       @values: can be a string or an array. String is less "secure" (should not contain repeated value).
       function checkMultiValues(objectId, values){
            selectMultiObject=document.getElementById(objectId);
            for ( var i = 0, l = selectMultiObject.options.length, o; i < l; i++ )
            {
              o = selectMultiObject.options[i];
              if ( values.indexOf( o.value ) != -1 )
              {
                o.selected = true;
              } else {
                o.selected = false;
              }
            }
        }
    

    Пример: checkMultiValues('thisMultiHTMLObject','a,b,c,d');

    17.02.2017
  • o.selected = (values.indexOf (o.value) != -1) сделает блок if устаревшим. 17.02.2017

  • 4

    Вы можете получить доступ к массиву параметров выбранного объекта, перейдя document.getElementById("cars").options, где «автомобили» — это выбранный объект.

    После этого вы можете позвонить option[i].setAttribute('selected', 'selected');, чтобы выбрать вариант.

    Я согласен со всеми остальными, что вам лучше делать это на стороне сервера.

    18.08.2009
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..