TaikiTkwkbysh
@TaikiTkwkbysh (WAKA Engineer)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

HTMLの「button」と「input type="button"」でクリックイベントが変わる

解決したいこと

javascriptである機能を実装中に直面したので、気になり投稿致しました。

ボタンを押したらinputの入力フォームにある値をHTMLに文字で出力するというよくある機能を作成していたのですが、

■buttonタグで作成 → クリックイベント発生後、一瞬追加されすぐ消える。

■input type="button"で作成 → クリックイベント発生後出力が残り続ける。

という差ができました。
これはどうしてこのような差ができるのでしょうか。

ご教示の程よろしくお願い致します。

ソース

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form>
        <label for="name">氏名</label>
        <input type="text" name="name" id="name"><br>

        <label for="age">年齢</label>
        <input type="text" name="age" id="age"><br>

        <label for="gender">性別</label>
        <input type="text" name="gender" id="gender"><br>

        <input type="button" id="button" value="送信">
         <!-- or -->
        <button id="button">送信</button>
    </form>

    <div id="result">

    </div>
    <script src="../dist/bundle.js"></script>
</body>
</html>

※Typescript

const button: HTMLInputElement = document.getElementById(
  "button"
) as HTMLInputElement;

const inputName: HTMLInputElement = document.getElementById(
  "name"
) as HTMLInputElement;

const inputAge: HTMLInputElement = document.getElementById(
  "age"
) as HTMLInputElement;

const inputGender: HTMLInputElement = document.getElementById(
  "gender"
) as HTMLInputElement;

const result: HTMLElement = document.getElementById("result") as HTMLElement;

button.addEventListener(
  "click",
  (e) => {
    const nameValue = inputName.value;

    const ageValue = inputAge.value;

    const genderValue = inputGender.value;

    const p = document.createElement("p");

    const text = document.createTextNode(
      `${nameValue} : ${ageValue} : ${genderValue}`
    );

    p.appendChild(text);

    result.appendChild(p);
  }
);

0

1Answer

button要素は既定でsubmit動作をします.

これを防ぐためにはtype="button"を明示的に指定しなければなりません.

<button type="button">Some text</button>

ついでに指摘しますが,DOM中idの重複は許されていないので,idを別のものにするかclassで識別するようにしてください.

2Like

Your answer might help someone💌