Используя ClojureScript, я пытаюсь действовать, когда кто-то нажимает enter
в текстовом поле, и игнорировать другие клавиши. Поэтому мне нужно иметь возможность различать разные нажатия клавиш.
Для справки, мой ns
в моем .cljs
:
(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]))
В моем html есть элемент ввода <input id="data-entry-box"></input>
. Я настроил прослушиватель следующим образом:
(defn listen [el type]
(let [out (chan)]
(events/listen el type
(fn [e] (put! out e)))
out))
(let [keypresses (listen (dom/getElement "data-entry-box") "keypress")]
(go (while true
(let [key-event (<! keypresses)
char-code (.-charCode key-event)]
(.log js/console (str "The character code is " char-code))
(.log js/console (str "The key is " (.-key key-event)))
(.log js/console (str "The event is " (.-event key-event)))
(.log js/console (str "Or the event is " (:event key-event)))
(if (= char-code
13)
(handle-submit))))))
После его компиляции, загрузки страницы и нажатия ввода в элементе ввода я получаю в консоли следующее:
"The character code is 13"
"The key is "
"The event is "
"Or the event is "
Это хорошо; Я могу проверить, что такое ключ, посмотрев значение ASCII, но мне не нужно этого делать. Я хотел бы получить прямой доступ к нажатому символу.
Если я поставлю точку останова, то увижу, что есть свойство .event
, а у этого свойства есть еще одно свойство .key
. Но я не могу получить к нему доступ, почему-то.