如何在 Observablehq 中创建带有标签的输入字段

How to create an input field with a label in Observablehq

我可以用这段代码创建一个输入文本框。在同一行向其添加标签,同时仍将其绑定到同一全局变量的最佳方法是什么?

viewof myText = html`<input type="text" value="initial value">

我愿意

viewof myText = html`Enter something: <input type="text" value="initial value">

但是 myText 没有绑定到输入字段。

获得此效果的最简单方法是使用 Jeremy 的 Inputs notebook,其中包括带标签的文本框。您可以 import 只将文本框方法添加到您的笔记本中,这可以解决一般问题。

在不导入其他笔记本的情况下,最简单的方法是:

viewof myText = {
  let form = html`Enter something: <input type="text" value="initial value">`;
  form.addEventListener('input', e => {
    form.value = e.target.value
  });
  return form;
}

viewof 读取返回给它的 .value 属性,此代码将 .value 属性 设置为包含的输入值.当输入元素是单元格中唯一的东西时,viewof 无需任何额外代码即可工作,但如果有多个元素都具有值,则用户代码需要告诉笔记本哪个输入提供了值。

目前(2021 年 10 月)Observable Inputs are the preferred way of adding input elements to notebooks. See the introductory notebook and collection

viewof myText = Inputs.text({
  label: "Enter something",
  placeholder: "Text",
  value: "Initial value"
})