とあるCMSのページ編集画面のカスタマイズに取り組んでいます。
たとえば以下のようなフォームがあるとします。
[x] そのまま上書き保存
[ ] 日付を指定して保存する ([ ]月[ ]日)
[実行]
簡略ですが、ソースは以下のような感じです。
<input name="sonomama" type="radio" checked /> そのまま上書き保存
<input name="hokanohi" type="radio" /> 日付を指定して保存
(<input type="text" />月<input type="text" />日)
<input type="submit" />
これでちょっと困っているのが、「月」と「日」に適当な
日時を入力したにも関わらず、ラジオボタンname="hokanohi"への
チェックを忘れたために結局「そのまま上書き保存」になって
しまうことです。なので、<input type="text" />にフォーカスが
移れば自動的にhokanohiにチェックが入るようにJavaScriptを
書けばいいわけですが、これがCMSであるために行き詰まっています。
このCMSは</head>の直前に任意のコードを挿入するようにカスタマイズ
することはできますが、inputタグ周辺そのものをカスタマイズする
ことはできません。コアファイルを直接編集すれば可能ですが、
コアのアップデートの際の手間などを考えると、できるだけコアは
さわらずにすませたいです。
なので、</head>の直前でJavaScriptを読み込み、それだけで
目的の挙動ができるような書き方ができないかと探しています。
最近流行しているAjaxやJavaScriptだと、もともとのソースには
ほとんど手を加えず、ライブラリを読み込ませるだけで様々な
処理ができるものがあるようですが、そのような実装をイメージ
しています。
このような書き方をすればいい、などのアドバイスが得られると
嬉しいです。
A 回答 (8件)
- 最新から表示
- 回答順に表示
No.8
- 回答日時:
こんにちは
focus()は使ってないですけどこんな感じのことがしたいのでしょうか?
【1】月日を入力したら2番目のラジオボタンをチェック
<script language="JavaScript">
<!--
function check() {
m = document.f.month.value;
n = document.f.day.value;
if(m == "" || n == "") { document.f.sel[0].checked = true; }
else { document.f.sel[1].checked = true; }
}
// -->
</script>
<form action="***.cgi" method="post" name="f">
<input type="radio" name="sel" value="1" checked>そのまま上書き保存<br>
<input type="radio" name="sel" value="2">日付を指定して保存
<input type="text" name="month" size="5" onkeyup="check()">月
<input type="text" name="day" size="5" onkeyup="check()">日<br>
<input type="submit" value="保存">
</form>
【2】月日のtextboxをクリックしたら2番目のラジオボタンをチェック
<script language="JavaScript">
<!--
function check1() {
document.f1.sel[1].checked = true;
}
// -->
</script>
<form action="***.cgi" method="post" name="f1">
<input type="radio" name="sel" value="1" checked>そのまま上書き保存<br>
<input type="radio" name="sel" value="2">日付を指定して保存
<input type="text" name="month" size="5" onclick="check1()">月
<input type="text" name="day" size="5" onclick="check1()">日<br>
<input type="submit" value="保存">
</form>
【3】submitボタンを押したときに判断
<script language="JavaScript">
<!--
function check2() {
m = document.f2.month.value;
n = document.f2.day.value;
if(m == "" || n == "") { document.f2.sel[0].checked = true; }
else { document.f2.sel[1].checked = true; }
}
//-->
</script>
<form action="***.cgi" method="post" name="f2">
<input type="radio" name="sel" value="1" checked>そのまま上書き保存<br>
<input type="radio" name="sel" value="2">日付を指定して保存
<input type="text" name="month" size="5">月
<input type="text" name="day" size="5">日<br>
<input type="button" value="保存" onclick="check2()">
</form>
【4】タイマー機能を使ってチェックする(例文は5秒間隔)
<script language="JavaScript">
<!--
window.onload=function() {
check3();
}
function check3() {
m = document.f3.month.value;
n = document.f3.day.value;
if(m == "" || n == "") { document.f3.sel[0].checked = true; }
else { document.getElementById("sel1").checked = true; }
tid =setTimeout("check3()", 5000);
}
//-->
</script>
<form action="***.cgi" method="post" name="f3">
<input type="radio" name="sel" value="1" checked>そのまま上書き保存<br>
<input type="radio" name="sel" value="2">日付を指定して保存
<input type="text" name="month" size="5">月
<input type="text" name="day" size="5">日<br>
<input type="button" value="保存"">
</form>
p.s.
form部、input部が変えられないのであればdocument.f.month.valueなどのところをdocument.getElementById("edit").elements[2].value(monthが[2]、dayが[3]です)、document.getElementById("hokanohi").checkedなどに変えれば使えると思います
No.7
- 回答日時:
こんなかんじで
<head>
<script language="javascript">
window.onload=function(){
var sonomama=document.getElementById('sonomama');
var hokanohi=document.getElementById('hokanohi');
var day=document.getElementById('day');
var month=document.getElementById('month');
sonomama.onclick=function(){month.value='';day.value='';}
day.onclick=function(){hokanohi.checked=true}
month.onclick=function(){hokanohi.checked=true}
}
</script>
</head>
<body>
<form id="edit">
<input id="sonomama" name="action" type="radio" checked />そのまま上書き保存
<input id="hokanohi" name="action" type="radio" />日付を指定して保存
<input id="month" name="month" type="text" />月
<input id="day" name="day" type="text" />日
<input type="submit" />
</body>
No.6
- 回答日時:
フォーム部分を正確に書きなおしてください。
いくら回答をしても命題自体が間違っていては全て無意味です。
そもそも<input type="text" />月では、いくら入力しても
結局なにもサーバーには送られません。
input要素にはidはふれないのですか?それがあればダイブ楽になります。
(なければそれなりの手を打つしかないですけど)
この回答への補足
下のkk273g906さんの回答もチェック中ですが、とりあえず
さらに正確な記述を補足します。複数のCMSがありますが、
ほぼ以下の書式です。<form>以外はユニークなidを振ってあります。
<form id="edit">
<input id="sonomama" name="action" type="radio" checked />そのまま上書き保存
<input id="hokanohi" name="action" type="radio" />日付を指定して保存
<input id="month" name="month" type="text" />月
<input id="day" name="day" type="text" />日
<input type="submit" />
id="month"または"day"のinput部品をマウスでクリックするなどして
フォーカスが移った時に、id="hokanohi"のラジオボタンにチェックを
切り換えたいです。
すいません、補足に間違いがありました。こちらに書きます。
> <form>以外はユニークなidを振ってあります
<form>にもid振ってありますね。
No.5
- 回答日時:
<head>
<title>??</title>
<script>
document.forms[0].elements["hokanohi"][0].onfocus=function(){
this.checked = true;
document.forms[0].elements["hokanohi"][1].checked = false;
}
document.forms[0].elements["hokanohi"][1].onfocus=function(){
this.checked = true;
document.forms[0].elements["hokanohi"][0].checked = false;
}</script>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ラジオボタンの値でリンク先を...
-
ラジオボタンのチェック
-
ラジオボタンでの動的項目の変...
-
1つのページにformを2つ設置。2...
-
onchangeイベントを強制的に発...
-
このjavascriptがわかりません
-
onClickとsubmitの処理順序
-
新しくフォルダを作成したい
-
javascriptで二重送信防止
-
JavaScript Form OPTION value
-
テキストの背景色を変える。
-
2次元配列で2項目についてソー...
-
マウスをブラウザの外に出した...
-
JavaScriptで特定のtdタグにcla...
-
数字の1文字目を消したい
-
onclickで画像と文字を別々の場...
-
クリックさせたいが、click()が...
-
別フレームへの必須入力チェッ...
-
javascriptで同じような処理を...
-
JavaScriptでアコーディオンメ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
javascriptを使ってラジオボタ...
-
ラジオボタンにタブインデック...
-
ラジオボタンのチェックが外れ...
-
javascript作成してます。ラジ...
-
ラジオボタンにチェックを入れ...
-
ラジオボタン未チェックの場合...
-
チェックされたラジオボタンに...
-
Jvasvriptのlengthで個数が取得...
-
フォームPOST後「戻る」時のチ...
-
データベースの値を判断してラ...
-
チェックボックスのON/OFFに連...
-
ラジオボタンでチェックした項...
-
サイト内にGoogleサイトを表示...
-
JavaScript ラジオボタン デ...
-
ラジオボタンでdisabledとchecked
-
リンク文字クリックでラジオボ...
-
ポップアップウインドウで選択...
-
jQueryで複数のラジオボタンを処理
-
js radioボタンの「name」を多...
-
ラジオボタンとif文
おすすめ情報