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

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

ただいまの
回答率

88.63%

入力中の生年月日ドロップダウンから年齢を自動計算したい

受付中

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 1,196

yuatam

score 10

 前提・実現したいこと

画面上で生年月日ドロップダウンの選択中(イベント実行前)に、
画面の入力フォームに年齢を自動計算した結果を表示したい。

 発生している問題・エラーメッセージ

イベント実行後に自動計算を行うことは出来るが、
画面入力中に計算の処理を行うことが出来ない。

 試したこと

JavaScriptを使用した自動計算、
Javaを使用した自動計算、
双方ともイベント実行後に行われてしまう。

 補足情報(FW/ツールのバージョンなど)

Spring Java 8,1 

  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • dice142

    2018/10/26 12:44

    まずできているところまでのコードをご提示ください。また、「ドロップダウンの選択中」とはどの状態を指しますか?「イベント」とはどのイベントのことでしょうか?

    キャンセル

回答 3

+1

プルダウンをマウスでころころ転がしているときに、年齢を求めたい意図と解釈しました

  • プルダウンが1つの(1つに年月日がある)場合

プルダウンを作る時点で、今日に対して、何歳になるか確定している。つまり、イベントうんぬんのまえにページ描画時に確定している
つまりプルダウンを「2000/01/01 18歳」「2000/12/31 17歳」といった表示にすればよい

  • プルダウンが3つの(年と月と日)の場合
  1. 年のプルダウンをさわっているとき
    年のプルダウンを選択している時点では、現在月や日は選択が済んでいる(デフォルト値でも選択はなされている状態)。その日が、一年の間で本日以降を指しているか、それより前を指しているかによって、各年に対応する年齢は一意に決まる。
    従って例えば「01」月「01」日を指している状態では「2000年 18歳」と出せるし、「12」月「31」日を指している状態では「2000年 17歳」と指せる。これは日や月のonchangeで年プルダウンを再描画すればよいだけ
  2. 月のプルダウン
    日が今日を越えていなければ、月をかえてもかわらない。日が今日を越えていると、今月以降か否かで1歳分かわる
    →不正確になるタイミングがあるため要件に対応できない
  3. 日のプルダウン
    月が今月でなければ、日をかえてもかわらない。月が今月であると、日をかえることで一歳分のずれが生じる
    →不正確になるタイミングがあるため要件に対応できない
    (逆に言えば、年と月日の2つのプルダウンにすれば解決できるとも言える)

結局、今できていないことに対応するには、プルダウンの数をかえるか、スピンボタンや数値入力のUIを導入するほかない。
→このUIの変更が想定するアプリに対して、どの程度不便になるかならないか、また不便になるとして1歳の違いを、マウスでホバー状態にあるほんのわずかな瞬間で知りたいかを検討すればよいと思われる

イベントが発火しないものを検知できると思うのはやめたほうがいいです。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

「選択中(イベント実行前)」とはなにか定義がわかりません。
なんらかのイベントを実行前にはトリガーがないのでなにも実行されることは
ないと思いますが・・・

なにもトリガーがない状態で処理をするためにはsetIntervalなどで
監視するとかですかね

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

プルダウンを操作している時に、リアルタイムで計算したい、のですか?

操作中にイベントが発生しない以上、計算をする契機がありません。ですから不可能です。
※これが SpinButton のようなものなら、一回毎にイベントが発生するから計算できますが

※C# などで作り込むならば不可能ではないですが(オーナードローするときに、選択中のものを見つけたら計算する)、まず無駄としか思えない処理ですね

それに、日付が確定して初めて計算する意味が出てくるのですから、日付確定中に計算しても無駄でしょう。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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