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

时间:2015-08-27 12:07:25

标签: purescript halogen

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

除了我不知道如何自动将焦点设置为新创建的输入元素之外,这对卤素效果非常好。

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

1 个答案:

答案 0 :(得分:4)

好的,这是我使用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)。