如何以 Scala.js "HTMLFormElement" 的形式访问 HTML 表单元素(以便在其上调用 "post()")?

How to access an HTML form element as Scala.js "HTMLFormElement" (in order to call "post()" on it)?

HTML 页面中有一个表单:

<form id="mainForm">
  <input type="text">
  </input>
</form>

我可以通过

在 scala.js 中处理该表格
dom.document.getElementById("mainForm")

接下来我要打电话给

.send()

在表单上提交。但是,"send()" 不可用,因为

.getElementById()

从上面 returns 一个 "Element" 而不是 "HTMLFormElement",因此 "send()" 不可用。

如何 get/access 表格 "as" 和 "HTMLFormElement"?

总的来说,这种外部知识必须手动注入。最简单的版本是:

dom.document.getElementById("mainForm").asInstanceOf[HTMLFormElement]

是的,这有点蹩脚,但它经常发生在 JavaScript / HTML 和 Scala.js 之间的接口:因为 JS/HTML 级别是无类型的,并且Scala 级别是强类型的,你必须手动告诉 Scala 代码你期望什么类型。

如果你经常做这种事情,有一些方法可以半自动化(例如,检查标签,确定它是一个 FORM 并根据它进行转换),但这是更高级别 - getElementById 是原始 DOM 操作,并且 Scala.js 有意不向其添加额外的语义。

(许多 Scala.js 应用程序通过在程序本身中构建 HTML 来避免这种情况,因此它从一开始就是强类型的。)