質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.81%

フォームに入力したテキストを反映させたい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 261

asako1010

score 50

課題
上記の課題を作っている最中です。

現在の状態が以下の画像の通りです。
現在の状態

追加ボタンを押したときに、「0」と作業中の間にフォームに入力したテキストを反映したいのですが、反映されません。
反映されない理由は「commentEl.textContent = comment;」で文章(テキスト)しか取れないのにもかかわらず、textContentを使っているから反映されないのかと思うのですが、どう改善すればいいのかが分かりません。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>ToDoリスト</title>
<link rel="stylesheet" href="css/styles.css">

</head>
<body>
<h1>ToDoリスト</h1>

<div class="radiobutton">
    <input type="radio" id="button-1" name="radio1" value="1" checked />
    <label for="button-1">すべて</label>
    <input type="radio" id="button-2" name="radio1" value="2" />
    <label for="button-2">完了中</label>
    <input type="radio" id="button-3" name="radio1" value="3" />
    <label for="button-3">作業中</label>


    <h3 id="id_h3">ID コメント 状態</h3>
    <div id="todo"></div>
    <h2>新規タスクの増加</h2>

    <p id = id_p>
        <input type="text" id="id_text" value=""> 
        <button id="btn" type="btn" class="button"> 追加</button>
    </p>
    </div>

    <script>
    const id = 0;
    const btn = document.getElementById('btn');
    btn.addEventListener('click', () => { 

      const idEl = document.createElement("span");
      idEl.textContent = id;
      const comment = document.getElementById(id_text);
      const commentEl = document.createElement("span");
      commentEl.textContent = comment;

      const btn1El = document.createElement("button");
      btn1El.textContent = "作業中";
      const btn2El = document.createElement("button");
      btn2El.textContent = "削除";

      const divEl = document.createElement("div");
      divEl.appendChild(idEl);
      divEl.appendChild(commentEl);
      divEl.appendChild(btn1El);
      divEl.appendChild(btn2El);

      const todoEl = document.getElementById("todo");
      todoEl.appendChild(divEl);
      id++;
    }, false);

  </script>
</body>
</html>
.button {
  border-radius: 10px;
}
.button:hover {
  background-color: #59b1eb;
}
.button:active {
  top: 3px;
  box-shadow: none;
}


.radiobutton label {
    padding: 0 0 0 24px;    /* ラベルの位置 */
    font-size: 16px;
    line-height: 28px;        /* ボタンのサイズに合わせる */
    display: inline-block;
    cursor:    pointer;
    position: relative;
}
.radiobutton label:before {
    content: '';
    width: 14px;        /* ボタンの横幅 */
    height: 14px;        /* ボタンの縦幅 */
    position: absolute;
    top: 0;
    left: 0;
    background-color: rgb(0, 162, 255);
    border-radius: 50%;
}
.radiobutton input[type="radio"] {
    display: none;
}
.radiobutton input[type="radio"]:checked + label:after {
    content: '';
    width: 3px;        /* マークの横幅 */
    height: 3px;        /* マークの縦幅 */
    position: absolute;
  top: 5.5px;
    left: 5.5px;
    background-color: #fff;
    border-radius: 50%;
}

以下、修正しました。
付番について解決できました。

ただ、「id_text.value」としたのですが、フォームに入力したテキストが出力されないのはなぜなのでしょうか?

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>ToDoリスト</title>
<link rel="stylesheet" href="css/styles.css">

</head>
<body>
<h1>ToDoリスト</h1>

<div class="radiobutton">
    <input type="radio" id="button-1" name="radio1" value="1" checked />
    <label for="button-1">すべて</label>
    <input type="radio" id="button-2" name="radio1" value="2" />
    <label for="button-2">完了中</label>
    <input type="radio" id="button-3" name="radio1" value="3" />
    <label for="button-3">作業中</label>


    <h3 id="id_h3">ID コメント 状態</h3>
    <div id="todo"></div>
    <h2>新規タスクの増加</h2>

    <p id = id_p>
        <input type="text" id="id_text" value=""> 
        <button id="btn" type="btn" class="button"> 追加</button>
    </p>
    </div>

    <script>
    let id = 0;
    const btn = document.getElementById('btn');
    btn.addEventListener('click', () => { 

      const idEl = document.createElement("span");
      idEl.textContent = id;
      const comment = document.getElementById(id_text.value);
      const commentEl = document.createElement("span");
      commentEl.textContent = (comment);

      const btn1El = document.createElement("button");
      btn1El.textContent = "作業中";
      const btn2El = document.createElement("button");
      btn2El.textContent = "削除";

      const divEl = document.createElement("div");
      divEl.appendChild(idEl);
      divEl.appendChild(commentEl);
      divEl.appendChild(btn1El);
      divEl.appendChild(btn2El);      

      const todoEl = document.getElementById("todo");
      todoEl.appendChild(divEl);
      id++;
    }, false);

  </script>
</body>
</html>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2019/11/30 18:11

    なんですか?「目標物」って。
    自身や課題出した人しか分からない表現はしないようにしてください。
    見てるのは全て赤の他人です。

    キャンセル

  • m.ts10806

    2019/11/30 18:14

    あとこれだけだと「どういうことをして」「どうなったら正解なのか」も誰も分かりません。
    仕様、要件をきちんと説明してください。

    キャンセル

  • asako1010

    2019/11/30 18:53

    了解しました。

    キャンセル

回答 1

checkベストアンサー

+4

const comment = document.getElementById(id_text);


id_textという変数はご提示のコードの中では定義されていません。
十中八九、文字列 'id_text' としたいのだと思いますが、万が一、提示されていないコード中で定義済みの変数であればご放念ください。
あと、inputに入力された値を取りたい場合はvalueでアクセスするのがよいでしょう。


id++;


idは定数なのでインクリメントできません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/12/01 03:15

    ありがとうございます。
    付番について解決しました。
    ただ、id_text.valueとしたのですが、フォームに入力したテキストが表示されないのはなぜなのでしょうか?
    問題を解決するヒントを教えて頂けるとありがたいです。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.81%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る