取消选中 Clojurescript 中的复选框输入

Uncheck Checkbox inputs in Clojurescript

我有一系列复选框输入,我想在用户单击按钮时取消选中所有复选框。检查输入似乎没有设置 attr,所以我不确定 if/how 是否重置 "checked" 道具。我想在纯 CLJS 中执行此操作,不要额外的 DOM 操作库。如果在 Reagent 框架内有更聪明的方法来做到这一点,那也是一个 acceptable/helpful 答案。

(defn clear-order []
  (map #(set! (.-checked %) false) (.getElementsByTagName js/document "input")))

这得到了我所有的输入,也许做了它应该做的,但实际上并没有取消选中我的输入。

试试这个:

(doseq [something (goog.array.toArray (.getElementsByTagName js/document "input"))]
         (js/console.log something))

就像有人在评论中说的,你需要使用 eager 而不是 map,这是懒惰的。 run! 就像一个急切的 map。此外,HTMLCollection 不可排序,因此您可以使用 goog.array/toArray 获得可排序的内容。

综合起来:

(ns foo.core
  (:require
   [goog.array :as garray]))

(defn clear-order []
  (run! #(set! (.-checked %) false)
        (garray/toArray (.getElementsByTagName js/document "input"))))