OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

代入の基礎?

  • 困ってます
  • 質問No.192821
  • 閲覧数67
  • ありがとう数0
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 47% (767/1609)

あけましておめでとうございます。
下記は「n」の値によって年月日の値を変更しようとしています。n=2の時は今日の日付を入れます。これはOK。それ以外の時は「最初に年月日のフォームに表示された値」を「mydate」に代入したものを表示したいのですが、下記だと直前に年月日に表示されたものになってしまうようです。基本的なこととは思いますが、助言いただけないでしょうか。

function set( n ) {
mydate = document.myFORM.年月日.value
if(n == 2) {document.myFORM.年月日.value = "今日の日付を入れる"};
else {document.myFORM.年月日.value = mydate}
}
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1

確かにこのソースでは、mydateは、set(n)が呼ばれたときに年月日に入っていた値が入ります。
このset(n)関数が動いた時に表示されていた値が格納されることになるからです。

「最初に表示された値」というのが、どのタイミングで入るものであっても、一つのテキストボックスでは対応しきれません。
初期値を格納しておくhiddenフォームを一つ用意しましょう。
その上で、最初に年月日フォームに入力された値を、そのhiddenフォームにコピーします。
コピーする関数を呼び出すのは、テキストボックスのonChange()イベントでいいと思います。
最初の入力かどうかを判定するのは、hiddenに値が入っているかどうかで判定すればいいかと思います。

function setValue(){
// hiddenの値が空だったら、初回入力
if(document.myForm.hidden年月日.value == ""){
  //hidden項目に年月日の値をコピー
document.myForm.hidden年月日.value =
document.myForm.年月日.value
}
}

set(n)関数は下記のように変更します。
function set(n){
mydate = document.myForm.hidden年月日.value;
if(n == 2){
document.myForm.年月日.value = "今日の日付";
}else{
document.myForm.年月日.value =
document.myForm.hidden年月日.value;
}
}

HTMLは、

<form name="myForm">
<input type="text" name="年月日" onChange="setValue()">
<input type="hidden" name="hidden年月日">
<input type="button" value="今日の日付" onClick="set(2);">
<input type="button" value="初期値の日付" onClick="set(1);">
</form>

という感じです。
動作確認はしていませんが、考え方はこのようになるかと。
がんばってください。

# formの名前「年月日」は、このままですか?
# 2バイト文字は使わない方がいいかと思いますよ。
-PR-
-PR-
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ