3

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

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

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

4

1 回答 1

5

好的,这是我使用 Phil 的Initializer提示的方法:

编写一个真正关注元素的 JavaScript 函数。

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

菲菲吧。

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
] [ ]

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

于 2015-08-31T07:23:49.357 回答