Как передать фокус с одного элемента на другой в Reagent (Clojurescript)?

Я пытаюсь написать повторно используемый элемент управления тегами с помощью реагента. Что мне нужно сделать, так это сфокусировать поле ввода после того, как пользователь щелкнет элемент div предка. Чтобы быть более ясным, я хотел бы установить фокус на ввод с помощью класса tag-input после того, как пользователь щелкнет div с помощью класса form-element. Как это реализовать?

[:div.form-element
  [:div.some-other-class
    [:ul
      [:li "entered-tag"]
    ]
  ]
  [:input.tag-input {:type "text"}]
]

person Krzysztof Pniak    schedule 13.10.2015    source источник
comment
На самом деле, может быть, лучше сделать метки кликабельных вещей атрибутами for и вообще избегать обработки этого в clojurescript.   -  person rojoca    schedule 14.10.2015


Ответы (1)


я думаю, вам нужно реализовать некоторую обработку кликов старой школы:

[:div.form-element
  {:on-click #(do (println :click-click)
                  (.focus (.getElementById js/document "my-input")))}
  [:div.some-other-class
    [:ul [:li "entered-tag"]]]
    [:input.tag-input {:type "text" :id "my-input"}]]

поэтому вам, вероятно, следует создать некоторую фабричную функцию для этого элемента формы:

(defn form-element [id]
  [:div.form-element
    {:on-click #(.focus (.getElementById js/document id))}
    [:div.some-other-class
      [:ul [:li "entered-tag"]]]
      [:input.tag-input {:type "text" :id id}]])

и используйте его так:

[:div
  (form-element "form-element-1")
  (form-element "form-element-2")]

отлично работает для меня

person leetwinski    schedule 13.10.2015