【问题标题】:Why are these `select` elements not being rendered?为什么这些 `select` 元素没有被渲染?
【发布时间】:2021-02-27 03:38:18
【问题描述】:

我正在为一个需要在一个页面上显示 125 个下拉菜单的客户开发一个项目。我当然不会手动添加所有这些,所以我写了一个简单的for 表达式来为我做这件事。这适用于绝大多数下拉菜单(只是select 标签),但有些根本不显示。而且每次都是一样的三个。为什么这三个永远不会被渲染?在 Chrome Dev Tools 中的 Elements 视图中查看时,它显示下拉菜单位于 DOM 中,但未显示。我一遍又一遍地查看这段代码,我看不出它有什么问题,需要第二双眼睛吗?这里发生了什么? (注意: db/get-all-advertisers 永远不会返回 nil)这是我正在谈论的代码和图片:

编辑: 原来这是我所有 Ubuntu 机器上的浏览器或图形或 something 的一些绝对奇怪的错误。无法在我朋友的 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")])]])]))

【问题讨论】:

  • 是因为这些选择没有选项吗?
  • @Ouroborus 不,DOM 将所有下拉菜单显示为具有相同的选项。
  • 这与你的问题无关,但你所有的conj 电话都很奇怪。 (conj [x y] z) 只是 [x y z]
  • 是否有 CSS 隐藏了这些特定字段?似乎不太可能,但值得检查。
  • 如果您可以包含输出 html 数据和/或最小可重现示例(没有数据库查询和特定函数调用),那就太好了。

标签: clojure ring compojure hiccup


【解决方案1】:

您可以将fors 包装在doall 中以强制实现惰性序列

/编辑:

这可能是因为Chromium bug related to GPU hardware acceleration and double monitors.。许多人会遇到“仅限 Linux:空 SELECT 下拉菜单”。

bug thread 声明它与双显示器有关。一个解决办法是让右边的显示器比左边的小:

另一种(不是每个人都成功)解决方案是根据this answer禁用硬件加速:

总结就是你需要在Chrome中去“设置”然后“高级设置”,然后取消选中硬件加速框。

【讨论】:

  • 不幸的是,这也没有解决。
  • @TomLisankie 好的。看来(db/get-all-advertisers) 返回一个空列表或nil。您也可以尝试使用into 而不是conj,尽管它根本不起作用。它将删除一些嵌套:(conj [:select] [[:option]]) ;; => [:select [[:option]]](into [:select] [[:option]]) ;; => [:select [:option]]。当出现问题时,您能否在问题中传递(db/get-all-advertisers) 的结果?
猜你喜欢
  • 1970-01-01
  • 2013-07-21
  • 2011-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多