トップ > 技術メモ (ソフトウェア開発) >

Enterキーを打ってもsubmit(送信)しないようにするには

2004.11.06新規作成。

HTMLフォームで、submit(送信)ボタンを押さずにデータが送信されてしまうことがある。用途によってはその方が使いやすいこともあるが、編集中に意図せず送信されてしまうこともあるので、この動作を抑止したい。どうするか。

submitボタン

まず、submitボタンがあるかどうか。submitボタンがあるとき、input[type="text"]で生成されるテキストコントロール内でEnterキーを打つと、フォームデータが送信される。

例えば、次のようなフォームの場合。テキストコントロールが一つでも二つ以上でも同じであり、IE / Mozillaとも同じように振る舞う。

<form action="test">
  <input type="text" name="a"> <input type="text" name="b">
  <input type="submit">
</form>

<form action="test">
  <input type="text" name="a"> <input type="text" name="b">
  <button type="submit">push me</button>
</form>

テキストコントロールが複数ある場合、次のように書き換えると、この挙動を止めることができる。buttonタグにはtype属性が必要なことに注意。

<form action="test">
  <input type="text" name="a"> <input type="text" name="b"> 
  <input type="button" onClick="submit();" value="push me">
</form>

<form action="test">
  <input type="text" name="a"> <input type="text" name="b">
  <button type="button" onClick="submit();">ボタンです?</button>
</form>

一つだけのテキストコントロール

テキストコントロールが一つだけの場合は、より難しい。上記のようにinput[type="button"]またはbutton[type="button"]タグでsubmitボタンを生成していても、Enterキーで送信されてしまう。

次の例には、textareaによるテキストコントロールや隠蔽コントロールがあるが、これは考慮されず、あくまでもinput[type="text"]によるテキストコントロールの数によって挙動が決まる。

<form action="test">
  <textarea></textarea>
  <input type="hidden" name="dummy" value="dummy">
  <input type="text" name="b">
  <button onClick="submit();" type="button">ボタンでーす</button>
</form>

このような場合は、見えないテキストコントロールを生成するのがいい。CSSで、position:absolute; visibility:hidden と指定する。

<form action="test">
  <input type="text" name="a">
  <input type="text" name="dummy" style="position:absolute;visibility:hidden">
  <input type="button" value="hoge" onClick="submit();">
</form>

トップ > 技術メモ (ソフトウェア開発) > Enterキーを打ってもsubmit(送信)しないようにするには
このページについてのご感想・ご提案などをお寄せください。なお、コメントに「http:」、HTML aタグが含まれると送信されません。
評価: ◎ ← → ×
コメント:
お名前:
メールアドレス:
[Profile]  [Privacy Policy]  [Legal & Link]  [Site Map]  

banner Netsphere Laboratories http://www.nslabs.jp/

Copyright (c) HORIKAWA Hisashi. All rights reserved.

[PR]

はてなブックマークに追加  

サイト内検索:

[PR]