Почему эти элементы select не отображаются?

Я работаю над проектом для клиента, где на одной странице должно отображаться 125 выпадающих меню. Я, конечно, не собираюсь вручную добавлять все это, поэтому я написал простое выражение for, чтобы сделать это за меня. Это работает для подавляющего большинства выпадающих меню (которые представляют собой всего лишь теги select), но некоторые вообще не отображаются. И каждый раз одни и те же три. Почему эти же три никогда не рендерятся? При просмотре в представлении «Элементы» в Chrome Dev Tools раскрывающиеся списки отображаются как находящиеся в DOM, но они не отображаются. Я просматривал этот код снова и снова и не вижу в нем ничего плохого, и мне нужна вторая пара глаз? Что тут происходит? (ПРИМЕЧАНИЕ: db/get-all-advertisers никогда не возвращает nil) Вот код и изображение того, о чем я говорю:

РЕДАКТИРОВАТЬ: Оказывается, это какой-то совершенно странный баг с браузерами, графикой или чем-то еще на всех моих компьютерах с Ubuntu. Не удалось воспроизвести ошибку на Mac моего друга. Все работало нормально.

(def new-issue-html
  (hiccup/html
   [:html
    [:head
     [:title "Add an Issue"]
     [:meta {:name "viewport" :content "width=device-width, initial-scale=1.0"}]
     [:link {:rel "stylesheet" :href "css/bootstrap.min.css"}]
     [:link {:rel "stylesheet" :href "css/extra.css"}]
     [:script {:src "js/field-verify.js"}]]
    (let [advertisers (db/get-all-advertisers)]
        [:body
         [:div {:class "container-fluid center"}
          [:h1 "Add an Issue"]
          (conj
           [:form {:method "post" :name "newIssueForm" :action "/new-issue"}
            [:div
             [:label {:for "issue-date"} "Issue Time Period (i.e. \"July/August 2020\"): "]]
            [:div
             [:input {:id "issue-date" :name "issue-date" :style "margin-bottom: 10px;"}]]]
           (for [num (range 1 (inc NUM_OF_ADVERTISERS_PER_ISSUE))
                 :let [ad-slot [:div
                                [:label {:style "margin-right: 10px;" :for (str "ad-slot-" num)} (str num ": ")]
                                (conj
                                 [:select {:id (str "ad-slot-" num) :name (str "ad-slot-" num)}]
                                 (for [advertiser advertisers
                                       :let [option [:option {:value (:advertisers/advertiser_id advertiser)}
                                                     (:advertisers/advertiser_name advertiser)]]]
                                   option))]]]
             ad-slot)
           (anti-forgery-field)
           [:div {:style "margin-top: 10px;"}
            (hf/submit-button {:id "submit" :onclick "return checkForm()"} "Create Issue")])]])]))

скриншот проблемы


person TomLisankie    schedule 15.11.2020    source источник
comment
Это потому, что для этих вариантов нет вариантов?   -  person Ouroborus    schedule 15.11.2020
comment
@Ouroborus Нет, DOM показывает, что все раскрывающиеся списки имеют одинаковые параметры.   -  person TomLisankie    schedule 16.11.2020
comment
Это не относится к вашей проблеме, но все ваши conj звонки странные. (conj [x y] z) это всего лишь [x y z].   -  person amalloy    schedule 16.11.2020
comment
Скрывает ли CSS эти конкретные поля? Кажется маловероятным, но стоит проверить.   -  person Ouroborus    schedule 16.11.2020
comment
@Ouroborus Только что попытался удалить весь CSS, чтобы посмотреть, будет ли это что-то делать, ничего не изменилось, кроме стиля.   -  person TomLisankie    schedule 16.11.2020
comment
Может ли база данных возвращать NULL/nil для некоторых элементов в db/get-all-advertisers?   -  person Bob Jarvis - Reinstate Monica    schedule 16.11.2020
comment
@BobJarvis-ReinstateMonica Нет, все эти раскрывающиеся списки основаны на одних и тех же элементах, возвращаемых из базы данных (см. код)   -  person TomLisankie    schedule 16.11.2020
comment
Было бы неплохо, если бы вы могли включить выходные данные html и/или минимальный воспроизводимый пример (без запросов к базе данных и вызовов конкретных функций).   -  person leetwinski    schedule 16.11.2020
comment
Не могли бы вы добавить скриншот представления Elements в Chrome Dev Tools?   -  person Sreeram Nair    schedule 18.11.2020
comment
Воспроизводится ли проблема в другом браузере, например. Fire Fox?   -  person ez121sl    schedule 19.11.2020
comment
@SreeramNair Пожалуйста, проверьте обновление в исходном сообщении   -  person TomLisankie    schedule 22.11.2020
comment
@ ez121sl Пожалуйста, проверьте обновление в исходном сообщении   -  person TomLisankie    schedule 22.11.2020
comment
@leetwinski Пожалуйста, проверьте обновление, которое я дал в OP   -  person TomLisankie    schedule 22.11.2020


Ответы (1)


Вы можете обернуть for в doall, чтобы принудительно реализовать ленивую последовательность

/редактировать:

Возможно, это связано с ошибкой Chromium, связанной с аппаратным ускорением графического процессора и двойными мониторами. .. Многие люди сталкиваются с выпадающим меню «Только для Linux: Пустой ВЫБОР».

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

Мониторы разного размера

Другое (не удачное для всех) решение соответствует этому ответу чтобы отключить аппаратное ускорение:

Вывод таков: вам нужно перейти в «Настройки», затем «Дополнительные настройки» в Chrome, затем снять флажок «Аппаратное ускорение».

person Erwin Rooijakkers    schedule 16.11.2020
comment
Это тоже не исправило, к сожалению. - person TomLisankie; 16.11.2020
comment
@TomLisankie Хорошо. Тогда кажется, что (db/get-all-advertisers) возвращает пустой список или nil. Что вы также можете попробовать, хотя тогда это вообще не должно работать, так это использовать into вместо conj. Это удалит некоторую вложенность: (conj [:select] [[:option]]) ;; => [:select [[:option]]] против (into [:select] [[:option]]) ;; => [:select [:option]]. Можете ли вы передать результат (db/get-all-advertisers) в вопросе, когда что-то пойдет не так? - person Erwin Rooijakkers; 17.11.2020