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

Как получить значение текущего выбранного элемента ввода Selectize.js

Мне было интересно, как я могу получить значение выбранного в данный момент элемента в моем вводе Selectize.js? Я проверил документацию и просмотрел все, что связано с selectize.js в Stackoverflow, но не нашел ничего, что могло бы служить примером. Любые идеи? Вот то, что я полагал, будет работать на основе документации, но вместо этого выдало мне ошибку Undefined is not a function.

Обратите внимание на самую нижнюю часть кода, где я использую select.on('change'; это (в дополнение к другим методам API) я пробовал. On change работает отлично, но, к сожалению, больше ничего не работает.

var select = $('#searchTextbox').selectize({
          maxItems: 1, //Max items selectable in the textbox
          maxOptions: 30, //Max options to render at once in the dropdown
          searchField: ['text'], //Fields the autocomplete can search through.  Example of another searchable field could be 'value'
          openOnFocus: true,
          highlight: true,
          scrollDuration: 60, //currently does nothing; should say how many MS the dropdown and drop up animations take
          create: false, //Whether or not the user is allowed to create fields
          selectOnTab: true,
          render: {
              option: function(data, escape) {
                  var valueArray = [];         
                  valueArray[0] = data.value.split(",");
                  var color = valueArray[0][0] == "1" ? "green" : "red";

                  return '<div class="option" style="color: ' 
                      + color 
                      + ';">' 
                      + escape(data.text) 
                      + '</div>';
              },
              item: function(data, escape) {
                  var valueArray = [];         
                  valueArray[0] = data.value.split(",");
                  var color = valueArray[0][0] == "1" ? "green" : "red";

                  return '<div class="option" style="color: ' 
                      + color 
                      + ';">' 
                      + escape(data.text) 
                      + '</div>';
              }      
          }
      });

select.on('change', function() {
      var test = select.getItem(0);
      alert(test.val());
});



Ответы:


1

Нашел проблему!

Всем, кто использует selectize.js и испытывает проблемы с API, попробуйте это!

Если вы посмотрите на часть кода, где я инициализировал раскрывающийся список selectize.js, я сохраняю экземпляр в моей переменной select и все. Однако это неправильный способ делать что-то (по крайней мере, из того, что я видел). Вам нужно сделать следующее, а не просто сохранить экземпляр в переменной.

var $select = $("#yourSelector").selectize({
    //options here
});

var selectizeControl = $select[0].selectize

После этого вы сможете правильно использовать API. Без этого я получал ошибку Undefined is not a function.

Наконец, чтобы ответить на мой собственный вопрос, я смог получить текущее значение ввода selectize, используя следующий код (очевидно, .on('change') и alert не нужны):

selectizeControl.on('change', function() {
      var test = selectize.getValue();
      alert(test);
});

Почему это необходимо сделать именно так, я не совсем уверен. Возможно, кто-нибудь сможет просветить меня и любых будущих зрителей, почему этот способ работает, а мой предыдущий метод — нет.

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

10.07.2014
  • Полная версия для прямого доступа в консоли: $('#yourSelector').selectize()[0].selectize.getValue() 22.05.2015
  • Два варианта: 1) Сохраните ссылку на объект в переменной, которую вы загружаете в код, где бы вы ни находились. 2) Вызов в комментарии выше, который сбрасывает ваши настройки, так как инициализируется .selectize() Есть ли лучший третий вариант ссылку без ее сохранения или сброса? 15.09.2016
  • Используемый мной вариант, который, как правило, работает, состоит в том, чтобы сохранить ссылку в $(selectObject).data(selectize), чтобы я мог получить ее в другом месте кода, не расширяя область ссылки. $selectize = $("#mySelect").selectize({ .... }); $("#mySelect").data("selectize", $selectize); ... $selectize = $("#mySelect").data("selectize"); $libraryObject = $selectize[0].selectize; 15.09.2016
  • Спасибо @JasonBeck, это сработало. Хотя это похоже на обходной путь. Должен быть какой-то способ получить ссылку на selectize без его повторной инициализации. 27.03.2017

  • 2

    Вместо того, чтобы прикреплять событие позже, вы можете сделать это при инициализации:

    var select = $('#searchTextbox').selectize({
              maxItems: 1, //Max items selectable in the textbox
              maxOptions: 30, //Max options to render at once in the dropdown
              ...
              onChange: function(value) {
                   alert(value);
              }
          });
    

    Дополнительные обратные вызовы см. в документах.

    13.01.2015

    3

    В моих тестах selectize немедленно обновляет значение <select>, которое он «заменил» (на самом деле он только скрывает <select>, используя display: none).

    Итак, если вы не хотите использовать обратные вызовы или глобальные переменные, это так же просто, как:

    $('#id_of_the_select_element_you_called_selectize_on').val().

    16.08.2017
  • Простой селектор идентификатора (#) может не работать, но простой селектор класса (.) сработает. Если вы предпочитаете не использовать класс и придерживаться идентификатора, используйте селектор атрибутов, как в опции $('select[id=id_of_the_select_element_you_call_selectize_on]').val(). Смотрите больше в моем ответе на аналогичный вопрос: stackoverflow.com/questions/25090571/ 29.01.2019

  • 4

    В моем случае приведенные выше ответы не сработали, но я нашел простое решение.

    $("select").on('change', function() {
      var val = $(this).find(".item").attr('data-value');
      alert(val);
    });
    
    04.02.2021

    5

    Я работал с кнопкой ввода-группы, например:

    HTML

    <div class="input-group">
        <div class="input-group-button">
            <button type="button" class="button clear hide clear-selectize" value="clear">
                <span>X</span>
            </button>
        </div>
        <select name="name" id="id" class="selectize">
            <option value="">Choose an option</option>
            <option value="value1">value1</option>
            <option value="value2">value2</option>
            <option value="Value3">Value3</option>
        </select>
    </div>
    

    JQuery

    var $selectize = jQuery('.selectize').selectize({
        persist: false,
        create: true,
        sortField: 'text',
        onChange: function (value) {
            checkSelectizeValue(value);
        }
    });
    
    function checkSelectizeValue(value) {
        if ($('.selectize').val() !== '') {
            $('.clear-selectize').removeClass('hide');
        } else {
            $('.clear-selectize').addClass('hide');
        }
    }
    
    jQuery(document).on("click", ".clear-selectize", function (e) {
        var selectize = $selectize[0].selectize;
        selectize.clear();
    });
    
    18.02.2021
    Новые материалы

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

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

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

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

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

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

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