在 purescript-halogen 中创建后自动聚焦输入元素

Automatically focus input element after creation in purescript-halogen

我正在使用 purescript-halogen 构建类似电子表格的 table(类似于 Handsontable)。如果双击一个单元格,html 输入元素将呈现为相应 table 单元格的子元素(并且不会为所有其他单元格呈现此类元素)。

这对卤素效果很好,只是我不知道如何自动将焦点设置到新创建的输入元素上。

我尝试了 autofocus 属性,但这只适用于双击的第一个单元格。 JavaScript 方法是在新元素上调用 focus() 方法,但我不知道在卤素中更新 DOM 后如何调用它。有什么想法吗?

好的,下面是我如何使用 Phil 的 Initializer 提示完成的:

写一个 JavaScript 真正聚焦元素的函数。

exports.setFocusImpl = function(elemId) {
  return function() {
    document.getElementById(elemId).focus();
  };
};

FFI 它。

foreign import data FOCUS :: !

foreign import setFocusImpl :: forall e. Fn1 String (Eff (focus :: FOCUS | e) Unit)

setFocus :: forall e. String -> Eff (focus :: FOCUS | e) Unit
setFocus = runFn1 setFocusImpl

然后在初始化器中使用setFocus函数。

H.input
[ A.id_ "inputField"
, A.Initializer do
    liftEff $ setFocus "inputField"
    pure DoNothing
] [ ]

请注意,我使用的是旧版本的卤素,其中签名仍然是旧版本 (definition of Initializer in 30e8b2c7)。