Note: この記事は、3年以上前に書かれています。Webの進化は速い!情報の正確性は自己責任で判断してください。
コメント欄やログインフォームとかで良くある「次回から入力を省略する」を実現する方法。前回と前々回を踏まえ、Javascriptで実装してみます。
ブログのコメントフォームを例にとって実行。動作確認はサンプルファイルにて。HTMLは、こんな感じ。
<form method="post" action="" id="commentForm" onsubmit="return savePreset(this);">
<dl>
<dt>名前</dt>
<dd><input type="text" name="name" value="" /></dd>
<dt>Webサイト</dt>
<dd><input type="text" name="url" value="" /></dd>
<dt>コメント</dt>
<dd><textarea name="comment"></textarea></dd>
</dl>
<p>
<input type="submit" value=" 送信 " />
<label for="save"><input type="checkbox" value="yes" name="save" id="save" checked="checked" /> 名前とアドレスを保存する</label>
</p>
</form>
以下がスクリプト部分です。
function savePreset(thisform){
if(thisform.save.checked)
{
var preName = thisform.name.value;
var preURL = thisform.url.value;
setCookie('name', preName, 14, '', '', '');
setCookie('url', preURL, 14, '', '', '');
}
}
「名前とアドレスを保存する」にチェックが入っている場合のみ、「名前」と「Webサイト」の値を引っ張って関数setCookie()に渡しています。実際にCookieをどうこうしている関数は、「./with Imagination」のTop 10 custom JavaScript functions of all timeから拝借。
そして保存した情報を表示させるのが、以下の関数。
window.onload = function(){
loadPreset('name', 'url', 'commentForm')
};
function loadPreset(name, url, targetForm) {
var preName = getCookie(name);
var preURL = getCookie(url);
if(document.cookie)
{
document.getElementById(targetForm).name.value = preName;
document.getElementById(targetForm).url.value = preURL;
}
}
Sig.が自作した部分はonload部分と関数savePreset()およびloadPreset()となりますが、この部分は直接HTMLに書いたほうが良いでしょう。もうちょっと巧く書ければ良かったんですが、外部ファイルに記述するには汎用性がないからです。ま~用途からして、そんなに意味もないだろうから妥協してるんですが。
ちなみに、Cookieの有効期限は14日となります。これが長いか短いかは人によるでしょうが、任意で調節してください。
関連ページ
- Archiva, Dateオブジェクト
- Archiva, Cookieメモ
- Archiva, 動作サンプル
参照サイト
- ./with Imagination, Top 10 custom JavaScript functions of all time
- QuirksMode, Cookie
- Core JavaScript 1.5 Guide, Date Object
Note: スパム対策が面倒なので、コメント投稿を廃止しました。以前のコメントは残します。
ご意見・ご要望はtwitter@sigwygかはてブコメントにて。
3 Comments
こちらに公開されているJavaScriptを利用させて頂きたいと考えています。
■利用目的
①OpenPNEというオープンソースのSNSのログインフォームに利用。
②出来上がったテンプレートを配布。
上記2点を考えています。
そこで管理人様にお伺いしたいことと致しまして、こちらに公開されているJavaScriptのライセンスはどの様な形態なのかお伺いしたいと思っています。
利用させてくれ!などと図々しいことではありますが、宜しくお願い致します。 2008–06–27 23:33
いちおうCC2.1ってことになってますけど、そうですね、スクリプトの傍にコメントで該当記事へのリンクでも張っていただければ十分です。
「これどうやってるんだろう?」てソース見た人の一助になれれば最高ですね!
そうしてWebで得た知識はWebへ還元していくのです。
どうぞ心行くまで使い倒してやってください^^b 2008–06–28 05:01
スクリプトの頭にコメントでSig.様のH.M、記事のURL、記事の投稿日をスクリプト作成日として記載させて頂きます。
この度は図々しいお願いにも関わらずありがとうございます。
今後とも宜しくお願いします。 2008–06–28 16:08