如何使用通道访问ClojureScript中按键事件的属性?
使用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
enter
,而忽略其他键时采取行动。所以我需要能够区分不同的按键
作为参考,my.cljs
中的myns
是:
(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))))))