Използвайки 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))))))
След като го компилирам, заредя страницата и натискам enter във входния елемент, получавам следното в конзолата:
"The character code is 13"
"The key is "
"The event is "
"Or the event is "
Това е добре; Мога да проверя какъв е ключът, като потърся ASCII стойността -- но не би трябвало да го правя. Бих искал да получа директен достъп до натиснатия знак.
Ако поставя точка на прекъсване, мога да видя, че има свойство .event
и това свойство има допълнително свойство .key
. Но по някаква причина нямам достъп до него.