jQuery 每个循环与 jayq 和 ClojureScript

标签 jquery clojurescript

我正在尝试使用 jayq 对 ClojureScript 中的某些元素执行each 循环,但没有取得任何成功。我在运行时不断收到“Invalid arity: 1”。

该函数根据单个框的选中值来检查一堆框(想想“检查全部”功能)。单击“全部选中”框时调用的 toggle-all-checkboxes 函数:

(ns foo.events
  (:use [jayq.core :only 
    [$ is prop]]))

(defn toggle-all-checkboxes [event]
  (let [checked (is ($ (.-target event)) ":checked")]
    (.each ($ "td.checkbox-col input")
      (fn [_ checkbox] (
        (prop ($ checkbox) "checked" checked))))))

这实际上检查了 ($ "td.checkbox-col input") 返回的第一个框,但随后收到“Invalid arity”错误。

我猜测,由于 jayq 没有 each,因此可能有一种惯用的方法来执行此操作,但我无法找到它。我无法使用 map 因为 ($ "td.checkbox-col input") 返回(确切地说不是一个数组)。

最佳答案

我创建了一个通用解决方案。不确定它是否是最好的,但它完成了工作:

类似于 .each in jQuery 的通用函数:

(defn jq-each [selector each-fn]
  (let [elements (js->clj ($ selector))]
    (dotimes [el-num (count elements)]
      (each-fn el-num (nth elements el-num)))))

我的用法示例:

(defn toggle-all-checkboxes [event]
  (let [checked (is ($ (.-target event)) ":checked")]
    (jq-each 
      "td.checkbox-col input" 
      (fn [i checkbox]
        (prop ($ checkbox) "checked" checked)))))

each 函数就像我们在 jQuery 中的函数一样:一个索引和当前迭代的元素。

关于jQuery 每个循环与 jayq 和 ClojureScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22995502/

相关文章:

math - Baking-Pi 挑战 - 理解和改进

syntax - Clojure — 英镑符号的含义?`

javascript - 移动 View 中重叠的 Bootstrap 内容

javascript - 在 AngularJS 中排序时删除行和 localStorage 键

javascript - 我如何检测(并纠正?)跨浏览器的各种滚动条可见性?

clojurescript - 查找输入元素的值

clojure - 为什么我的 lein re-frame 模板中有 clj 和 cljs 文件夹?

javascript - 如何更改 Bootstrap 多选下拉菜单的高度和字体大小?

jquery - 如何将 ul 隐藏在 li 中?

javascript - JavaScript/Ramda 中与 Clojure 的 juxt 等效的函数