SIer だけど技術やりたいブログ

こわれたHTML構造でもEnter押下時のimplicit submissionをサポートする方法

html5

implicit submission とは

formタグ内でEnterを押したらformがサブミットされるという仕様。

以下のように、formタグ内に input type=“submit” 要素があると、

<!doctype html>
<html>
<body>
  <form>
    <input type="text" name="id" />
    <input type="text" name="password" />
    <button type="submit">submit</button>
  </form>
</body>
</html>

Enterを押下したらサブミットされる。

課題

やむを得ない事情で、以下のような構造のHTMLを書くと、implicit submittion がサポートされない。 Bootstrapのmodalとかな!レイアウトがそんなに大事なんかワレ!
参考: Bootstrap Modal

<!doctype html>
<html>
<body>
  <form>
    <input type="text" name="id" />
    <input type="text" name="password" />
  </form>
  <button type="submit">submit</button>
</body>
</html>

解決方法

HTML5から追加されたform属性を使うとimplicit submission をサポートできる。 これで各要素が指定されたform要素に含まれるかのように扱われる。

<!doctype html>
<html>
<body>
  <form id="my-form">
    <input type="text" name="id" />
    <input type="text" name="password" />
  </form>
  <!-- formの属性にformタグのidを指定する -->
  <button type="submit" form="my-form">submit</button>
</body>
</html>

検証環境

  • Google Chrome 63.0.3239.84

参考

implicit submission