【发布时间】: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