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

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

ただいまの
回答率

90.61%

  • JavaScript

    15970questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

JavaScriptで収支表を作りたい

受付中

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 737

Furisuke

score 93

下記のコードはパチスロの収支表です
少し問題が起きていてご質問させてください

・結果データ出力の部分が保存されない
・データを一回しか書き込めない
理想はボタンをクリックすれば何回でも書き込め先に書き込んだデータの下に出力されるようにしたい

どこを変えればうまくいくのでしょうか?

<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <title></title>
</head>
<body>
  <h1>パチスロ収支表</h1><br>
  <input type="button" value="収支を入力" onclick="money_form();"><br>
  <!--ここに現在の金額を表示-->
  <div id="result"></div>
  <h2>収支履歴</h2><br>
  <!--過去に打ち込んだ収支を表示-->
  <div id="money_log"></div>

<script>
  function money_form(){
    //日付の取得
    var now = new Date();
    var yaer = now.getFullYear();
    var month = now.getMonth() + 1;
    var date = now.getDate();
    //結果データ
    var today = yaer + "/" + month + "/" + date;
    var form_today = prompt("日付を入力", today);
    var form_name = prompt("台名を入力");
    var form_money = prompt("収支を入力");
    var today_result = form_today + "/" + form_name + "/" + form_money + "円";
    //結果データ出力
    var txt_result = document.getElementById('money_log').innerHTML = today_result;
  }
  //logの保存とロード
  window.onload = function() {
    var body_result = localStorage.getItem('txt_result');
  }
  money_log.onchange = function(){
    localStorage.setItem('today_result', today_result.value);
  }

  //console.log(body_result);

</script>
</body>

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

0

こちらでどうでしょう。
  function money_form(){
    //日付の取得
    var now = new Date();
    var yaer = now.getFullYear();
    var month = now.getMonth() + 1;
    var date = now.getDate();
    //結果データ
    var today = yaer + "/" + month + "/" + date;
    var form_today = prompt("日付を入力", today);
    var form_name = prompt("台名を入力");
    var form_money = prompt("収支を入力");
    var today_result = form_today + "/" + form_name + "/" + form_money + "円";
    //結果データ出力
    var result_data = document.getElementById('money_log').innerHTML;
    if(result_data != ""){
      result_data += "<br>\n";  //空じゃない場合に改行
    }
    document.getElementById('money_log').innerHTML = result_data + today_result;
    save();
  }
  //logの保存とロード
  window.onload = function() {
    var body_result = localStorage.getItem('txt_result');
    document.getElementById('money_log').innerHTML = body_result;
  }
 function save(){
    localStorage.setItem('txt_result', document.getElementById('money_log').innerHTML);
  }
元のコードには、主に次のような問題があります。
・<div>にonchangeは使用できません。従って、保存はされません。そもそもmoney_logは未定義の状態です。
・保存時と読み込み時でストレージのキーが違う。そのため、保存・読み込みができない。
・書き込むときに元のHTMLに上書きしてしまっている。

ですので、示したコードを試してみてください。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2015/08/23 09:15

    ありがとうございます!!
    また質問で申し訳ないのですがたとえば10個書き込んだとして上から2目を削除したいと思った時に削除する方法ってありますか?

    キャンセル

  • 2015/08/23 12:46

    追記です
    window.onload = function() {
    var body_result = localStorage.getItem('txt_result');
    document.getElementById('money_log').innerHTML = body_result;
    }
    のtxt_resultってどこで変数としてtxt_resultが定義されているのでしょうか?

    キャンセル

  • 2015/08/24 09:17

    >window.onload = function() {
    >var body_result = localStorage.getItem('txt_result');
    >document.getElementById('money_log').innerHTML = body_result;
    >}
    >のtxt_resultってどこで変数としてtxt_resultが定義されているのでしょうか?

    txt_resultという変数は定義されていません。save()でストレージに「txt_result」という名前で保存し、 localStorage.getItem('txt_result')で「txt_result」という名前で保存したものを取り出しています。

    キャンセル

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

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

関連した質問

  • 受付中

    JavaScriptの綺麗なコードの書き方

    JavaScriptの綺麗なコードの書き方がわかりません。 例えば下記のような関数があった場合、皆さんならどのようにまとめますか?   function userLogin() {

  • 解決済

    JSでCheckBoxの値を取りたい

    CheckBoxの値を取得して何が選択されたかをconsole.logに出力したいのですがうまくいきません elementsのところがエラーになってしまいます どうすれば動きますか

  • 受付中

    innerHTMLの追加と削除

    こんにちは 現在JSでToDoメモのようなものを作ろうと思っているのですが 問題点が2つ出てきました。 1、innerHTMLにtextに書き込まれた内容を書き込めるが追加ができな

  • 解決済

    【JavaScript】メッセージのやりとりの処理について

    WebSocketとJavaScriptを用いて即時性のあるメッセージのやりとりをおこなう プログラムを書いているのですが、 数カ所、動作がおかしいところがあるので、 ご享受いただ

  • 受付中

    JSのテキスト保存について

    下記のコードはテキストボックスに書かれた文字をinnerHTMLで書き出しそれを更新しても消えない、保存するというプログラムです。 ですが肝心の保存ができません なぜでしょうか?

  • 受付中

    JavaScriptのlocalstorage

    下記のコードは収支を計算するコードです もとのお金を入力し、ボタンを押せばその日の収入を入力して計算し結果を表示して保存するというコードなのですが保存ができません どうすればできま

  • 受付中

    JavaScriptの変数の更新

    下記のコードはプロンプトで入力された数字をinnerHTMLに表示し保存するというコードです。 そこまではうまくいくのですがこれを 次回入力された数字が前回より大きな数字だった場合

  • 受付中

    JSのToDoメモ制作について

    以下のコードはJavaScriptのToDoメモです。 書き込んだ内容を追加、保存はうまくいったのですが削除がうまくいきません。削除ボタンを押すとすべて消えてしまいます。 どうすれ

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

  • JavaScript

    15970questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。