首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >焦点事件处理(文本)不起作用

焦点事件处理(文本)不起作用
EN

Stack Overflow用户
提问于 2014-04-17 21:26:12
回答 1查看 179关注 0票数 0

我在ClojuseScript中使用enfocus来处理dom。

我有一个事件处理程序:

代码语言:javascript
复制
(ns numeros-linguas.script
  (:require [enfocus.core :as ef]
            [enfocus.events :as ev])
  (:require-macros [enfocus.macros :as em]))

(defn aviso-seleciona []
  (ef/at "select" (ev/listen :change
                             (fn [evt]
                               (let [lingua-id (ef/from [:select] (ef/get-prop :value))
                                     lingua-selector (str "#" lingua-id)
                                     cores (array "azul" "vermelho" "laranja" "verde")
                                     linguas-visiveis (when-let [r (ef/from [:#resultado :> :div.visivel] (ef/get-attr :id))]
                                                        (-> r
                                                            list
                                                            flatten))]
                                 (ef/at "#resultado" (ef/append (ef/from lingua-selector identity)))
                                 (ef/at lingua-selector (ef/remove-class "invisivel"))
                                 (ef/at lingua-selector (ef/add-class "visivel"))
                                 (map #(do
                                         (ef/at (str "#" %)
                                                (ef/add-class %2))
                                         (map (fn [cor]
                                                (ef/at (str "#" %)
                                                       (ef/remove-class cor)))
                                              (remove #{%2} cores)))
                                      linguas-visiveis cores))))))

(set! (.-onload js/window)
  aviso-seleciona)

棘手的部分在地图上。我想从一些div元素中删除一些css类,并在这些元素中添加一些其他类。但这是行不通的。表单中的所有其他元素都在工作,只有这个元素除外。但是,如果我将表单复制并粘贴到一个连接到该页面并运行代码的repl中,它就会像预期的那样工作。我试着对代码的部分内容进行注释,以了解正在发生的事情,但毫无希望。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-22 15:17:22

我注意到您在map中做了一些副作用,因为map很懒,所以不能工作,也就是说,除非您尝试使用它生成的序列,否则它不会进行评估,这解释了为什么它在REPL中工作,而不是在浏览器中工作。

要获得最快和最脏的修复,请尝试使用dorun强制计算您的序列:(dorun (map #(do ...... )

或者,习惯性地,将您的代码重写为类似于此的内容(这并不是非常惯用的):

代码语言:javascript
复制
(doseq [[el cor-to-add] (map vector linguas-visiveis cores)]
  (ef/at (str "#" el)
         (ef/add-class cor-to-add))
  (doseq [cor-to-remove (remove #{cor} cores)]
    (ef/at (str "#" el)
           (ef/remove-class cor-to-remove)))
  )

或者,从每个元素中删除所有类,首先:

代码语言:javascript
复制
(doseq [el linguas-visiveis
        cor cores]
  (ef/at (str "#" el)
         (ef/remove-class cor)))

之后只添加必需的类:

代码语言:javascript
复制
(doseq [[el cor] (map vector linguas-visiveis cores)]
  (ef/at (str "#" el)
         (ef/add-class cor)))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23143750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档