Forms 如何以Scala.js的形式访问HTML表单元素;HTMLFormElement“;(以便对其调用“post()”)?

Forms 如何以Scala.js的形式访问HTML表单元素;HTMLFormElement“;(以便对其调用“post()”)?,forms,scala,scala.js,Forms,Scala,Scala.js,HTML页面中有一个表单: <form id="mainForm"> <input type="text"> </input> </form> 接下来我想打电话 .send() 在表格上提交。但是,“send()”不能作为 .getElementById() 从上面返回一个“Element”而不是“HTMLFormElement”,因此“send()”不可用 如何将表单作为“HTMLFormElement”获取/访问?大体上,这种外部

HTML页面中有一个表单:

<form id="mainForm">
  <input type="text">
  </input>
</form>
接下来我想打电话

.send()
在表格上提交。但是,“send()”不能作为

.getElementById()
从上面返回一个“Element”而不是“HTMLFormElement”,因此“send()”不可用


如何将表单作为“HTMLFormElement”获取/访问?

大体上,这种外部知识必须手动注入。最简单的版本是:

dom.document.getElementById("mainForm").asInstanceOf[HTMLFormElement]
是的,这有点麻烦,但它通常发生在JavaScript/HTML和Scala.js之间的接口上:因为js/HTML级别是非类型的,而Scala级别是强类型的,所以您必须手动告诉Scala代码您期望的类型

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


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

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

dom.document.getElementById("mainForm").asInstanceOf[HTMLFormElement]
是的,这有点麻烦,但它通常发生在JavaScript/HTML和Scala.js之间的接口上:因为js/HTML级别是非类型的,而Scala级别是强类型的,所以您必须手动告诉Scala代码您期望的类型

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

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