如何使用通道访问ClojureScript中按键事件的属性?

如何使用通道访问ClojureScript中按键事件的属性?,clojure,clojurescript,Clojure,Clojurescript,使用ClojureScript,我试图在有人在文本字段中按下enter,而忽略其他键时采取行动。所以我需要能够区分不同的按键 作为参考,my.cljs中的myns是: (ns calculator.calculator (:require-macros [cljs.core.async.macros :refer [go]]) (:require [goog.dom :as dom] [goog.events :as events] [cl

使用ClojureScript,我试图在有人在文本字段中按下
enter
,而忽略其他键时采取行动。所以我需要能够区分不同的按键

作为参考,my
.cljs
中的my
ns
是:

(ns calculator.calculator
  (:require-macros [cljs.core.async.macros :refer [go]])
  (:require [goog.dom :as dom]
            [goog.events :as events]
            [cljs.core.async :refer [put! chan <!]]
            [clojure.string :as string]))
这很好;我可以通过查找ASCII值来检查键是什么——但我不必这样做。我想直接访问按下的字符


如果我放置一个断点,我可以看到有一个
.event
属性,该属性还有一个属性
.key
。但由于某些原因,我无法访问它。

按键上的属性实际上没有被称为
。event
;它被称为
.event.
。注意后面的下划线。因此,我们使用
(.-event\uuukey event)
访问它,如下所示:

(let [keypresses (listen (dom/getElement "data-entry-box") "keypress")]
  (go (while true
        (let [key-event (<! keypresses)
              key-pressed (.-key (.-event_ key-event))]
          (.log js/console (str "The key pressed was " key-pressed))
          (if (= key-pressed
                 "Enter")
            (handle-submit))))))
(让[按键(监听(dom/getElement“数据输入框”)“按键”)]
(虽然是真的
(让[关键事件](
此代码打印:“按下的键是Enter”


请注意,javascript没有字符文本,因此
(.-key(.-event\ukey event))
返回的是一个字符串
“Enter”

看看捕鼠器代码-

通常使用键码或手动将其映射为“回车”


另外,我很怀疑event_uu是否是一个公共属性,您可以参考

show your listen method,我不认为名为event_uuu的属性。您使用哪个浏览器?输入完整的工作示例代码。thx@edbond我将其编辑成问题,并且(至少在Firefox 31和Chromium 36中)该属性被明确命名为
事件
。不幸的是,在Chromium中,子属性不是
,而是
键标识符
事件
看起来像是ClojureScript(或Google闭包)--它是在ClojureScript编译器生成的javascript中分配的。因此,您不应该依赖它。在高级编译中,它将被强制转换为类似“A”的内容,您的代码将无法工作。
"The character code is 13"
"The key is "
"The event is "
"Or the event is "
(let [keypresses (listen (dom/getElement "data-entry-box") "keypress")]
  (go (while true
        (let [key-event (<! keypresses)
              key-pressed (.-key (.-event_ key-event))]
          (.log js/console (str "The key pressed was " key-pressed))
          (if (= key-pressed
                 "Enter")
            (handle-submit))))))