Уменьшить выбранный размер: размер подстраивается под параметры фильтра - PullRequest
0 голосов
/ 07 января 2020

У меня есть простая проблема, я не знаю, как управлять, у меня есть простой выбор, который получает полный список параметров, которые я использую JS, чтобы отфильтровать показанный вариант на основе другого выбора (источник: http://jsfiddle.net/pz9cjmLg/5/ )

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

enter image description here Я пытаюсь использовать size = "3" (например), но это не то, что мне нужно

html

        <form id="form_reallocation" method="POST" class="post-form">
            {% csrf_token %}
              <div class="form-group">
                <label for="exampleFormControlSelect1"><strong>{% trans 'Patient code number :' %}</strong></label>
                <select required name="patients" class="form-control" id="patients" data-patient-url="{% url 'randomization:patient' %}">
                    <option value=""></option>
                    {% for patient in patients %}
                        <option value="{{ patient.ran_log_sit }}/{{ patient.ran_num }}">{{ patient.ran_num }}</option>
                    {% endfor %}
                </select>
              </div>
            <br><br>
            <button id="reallocate" type="submit" class="btn btn-primary">{% trans 'Reallocate' %}</button>
        </form>

JS

sel.on('change', function () {
  selected_site = this.value;
  var value = site_abbreviation(parseInt(selected_site));
  var options = $("#patients option");
  // on commence par masquer toutes les options
  // options.hide();
  $("#patients option[value]").filter(function() {
    return +$(this).val() != "";
  }).hide();
  // on affiches les options correspondant au site sélectionné
  var op = options.filter(function () {
    // return value == $(this).val().slice(4,6); // on retourne les options dont la valeur (numéro patient) contient le code lettre du site
    return value == $(this).val().slice(0,2); // gestion des patients pré-inclus dans un site et randomisé dans un autre centre
  }).show();

  $("#patients").val(op.eq(0).val());
  // $("#patients")[0].selectedIndex = 0;
  $("#patients option:selected").prop("selected", false);
  $("#patients option:first").attr('selected','selected').change();
})

1 Ответ

0 голосов
/ 07 января 2020

Не могли бы вы отключить второе поле выбора, чтобы его можно было выбрать только после того, как был выбран первый выпадающий список, и оно не равно нулю?

, поэтому инициализируйте второй выбор с помощью «disabled», затем используйте

$(".CompName").removeAttr("disabled")

С событием CompType onChange?

...