Ajaxで今よみがえる(^^;;-->[クロスブラウザ技術 ]DHTMLサンプル集
古籏一浩さんとのはじめての共著 発売中-->『Ajax実践テクニック』 古籏一浩/高橋 登史朗 (著)秀和システム
配本予約開始-->『入門Ajax 増補改訂版 』 高橋 登史朗 (著)ソフトバンククリエイティブ ; ISBN: 4797336242
-- リスト --
【カテゴリー】 ActionScript ( 5 ) AIR ( 2 ) AjaSQL ( 10 ) Ajax ( 573 ) Arax ( 1 ) canvas ( 10 ) CSS ( 11 ) ( 5 ) DLNA ( 1 ) Dojo ( 17 ) DOM ( 45 ) ES4 ( 4 ) Ext JS ( 2 ) 反重力物質 ( 1 ) ffAdd-on ( 1 ) Flash ( 46 ) Flash Remoting ( 11 ) FTP ( 2 ) GAF ( 9 ) Google Maps ( 118 ) GPS ( 42 ) HTTPヘッダサンプル ( 9 ) Internet ( 1 ) iPhone ( 13 ) IPv6 ( 1 ) 漫画 ( 1 ) Java ( 45 ) JavaScript ( 261 ) jKamo ( 8 ) jQchart ( 2 ) jQuery ( 108 ) jquery-ref ( 1 ) jsGadget ( 19 ) jslb_ ( 3 ) jslb_ajax ( 9 ) JSON ( 46 ) JSR223 ( 7 ) kjscmd ( 1 ) KNOPPIX ( 1 ) Linux ( 16 ) Mac ( 8 ) Memo ( 3 ) Microformats ( 2 ) Mini AJAX ( 2 ) MochiKit ( 2 ) mootools ( 3 ) Movable Type ( 57 ) MySQL ( 10 ) NewGameWeb ( 2 ) Nucleus ( 8 ) OpenAJAX ( 3 ) OpenDocument ( 1 ) OS ( 7 ) P2P ( 2 ) Perl ( 7 ) PHP ( 37 ) PostGIS ( 1 ) PostgreSQL ( 4 ) prototype.js ( 22 ) ROBOT ( 1 ) RSSリーダー ( 14 ) Ruby on Rails ( 7 ) Spry ( 6 ) SQLite ( 16 ) SQLiteWorker ( 2 ) ssh ( 1 ) SSI ( 2 ) SVG ( 15 ) TRON ( 1 ) Video ( 1 ) VML ( 1 ) Webサービス ( 96 ) widget ( 6 ) Wii ( 1 ) Wiki ( 1 ) Win ( 6 ) WSH ( 1 ) X01HT ( 29 ) XML ( 30 ) XOOPS ( 1 ) XQuery ( 2 ) XUL ( 4 ) Yahoo! UI ( 63 ) 日付入力用カレンダー ( 1 ) 『Ajax実践テクニック』 ( 1 ) 『入門 Ajax』 ( 42 ) WinTips ( 2 ) こりゃすごい ( 3 ) チューニング ( 22 ) ダイナミックロード関数 ( 7 ) リファレンス ( 18 ) ライブラリ ( 112 ) レーダー雨量表示 ( 1 ) ハード ( 23 ) ペンギン ( 2 ) ブラウザ ( 72 ) ブログでBBS ( 1 ) アクセスグラフ ( 3 ) イベント ( 2 ) カレンダーによる日付入力スクリプト ( 4 ) クロスブラウザ ( 11 ) クロスブラウザ関数 ( 7 ) スマートフォン ( 8 ) セキュリティ ( 111 ) ソフトイーサ ( 1 ) マッシュアップ ( 23 ) 暗号 ( 4 ) 映画 ( 47 ) 河川の水位グラフ ( 3 ) 回線 ( 2 ) 開発ツール ( 26 ) 牛久大仏 ( 8 ) 携帯 ( 134 ) 言語 ( 18 ) 故障 ( 3 ) 洪水警報システム ( 2 ) 今日のひと言 ( 5 ) 仕様 ( 58 ) 雑談 ( 224 ) 実装 ( 1 ) 書籍 ( 17 ) 親子ウインドウ有無の確認関数 ( 3 ) 新海誠 ( 3 )
【info】有料サポート(ベータ)限定 承り中 多忙につき、一時、新規受付停止 閉店中 /【JSサポート(仮称)】 

【info】いつもいろいろなテストなどをページ内のあちこちでやっているので、重かったり、壊れていたりするf^^;ことも多いです。実験用ですので、カオス(混沌)をあえて意図したりもしますので、標準やValidとは無縁だったりしますが、何卒、ご了承ください ( _ _ b

2007年11月10日

【jQuery】日付入力用カレンダーをjQueryプラグイン用に移植中

jQuery , カレンダーによる日付入力スクリプト , チューニング , ライブラリ ブックマークに追加する ブックマーク-- Buzzurl  / Hatena  / Livedoor track feed


Calendar Plugin for jQuery 1.2.1 (nightly)
http://jsgt.org/lib/jquery/plugin/calendar/nightly.htm

まぁ、移植といってもほぼ全部書き直しです(笑)。
旧版の機能は、まだ、全部入れてませんが、それ以上に追加機能が増えそうです。

最初、エンジンはjQueryに依存せずYUIなどでも切り替えて使えるようにカレンダーコアだけ書くつもりだったのですが、書いているうちに、勉強も兼ねつつあちこちにjQueryを使いたくなって結局、とりあえずjQuery専用ですf^^;。 

でも、動作は旧版の方がjQuery版よりもきびきび動きますね。( jQueryは、汎用ですから無駄もありますし、 あるいは、jQuery のあの魔法^^;のせいかなぁ )<作り方のせいかも(^^;

旧版日付入力用カレンダー
http://game.gr.jp/js-ml/samples/199912/calendar/cal1.htm

うーん、旧版のスコープとか名前を整理するだけにして、まるまんま、放り込んだほうが良いかもf^^;、、、。汎用ライブラリの魅力は簡単に書けることですが、速度は眼をつぶるようかなぁ。。。

あ、でも、追加機能はやっぱりjQueryでないと増やす気にならないので、やっぱりjQueryですね。

2007-11-16-1 日付フォーマットの指定用属性を datetmp="YYYY/MM/DD"にしてみる

Calendar Plugin for jQuery 1.2.1 (2007-11-16-1) 
http://jsgt.org/lib/jquery/plugin/calendar/20071116-1.htm


日付タイプdatetypeというより日付テンプレートな機能なので、属性名をdatetmpにしてみました。まぁ、細かいことですけどf^^;

<input class="jquery-calendear" type="text" datetmp="YYYY/MM/DD" />
<input class="jquery-calendear" type="text" />
<input class="jquery-calendear" type="text" datetmp="YYYY年M月のD日はW曜日" style="width:180px" />
<input class="jquery-calendear" type="text" datetmp="YYYY-MM-DD【W】" />

追記 とりあえず (3) でnightly

Calendar Plugin for jQuery 1.2.1 (nightly) 
http://jsgt.org/lib/jquery/plugin/calendar/nightly.htm


2007-11-14-1-1 日付フォーマットの指定方法 コードの書き方候補(3) attributeで datetype="YYYY/MM/DD"

Calendar Plugin for jQuery 1.2.1 (2007-11-14-1-1) 
http://jsgt.org/lib/jquery/plugin/calendar/20071114-1-1.htm


話の流れ的に、<input class="jquery-calendear" type="text" datetype="YYYY/MM/DD">も試してみました。
これが、簡単ぽい(笑)。一応、どれも、Sfari3,2、IE6,7、Firefox2、Oprea8,9で動作します。

最初のHTMLコメントを利用する(1)は、仕様を気にする必要が少なそうですが、圧縮をかけたときに、あっさり削除される危険があります(^^;ので、 (2)か、この(3)のどちらかかなぁ。こういう時HTML実装は自由で良いなぁ(笑)。しかも、これは多くのブラウザ(たぶん)で使えます。つまり、多くの利用者を排除せず、便宜を提供します。うんうん。<JavaScriptな時点で、、、<手入力を排除してないということで。

<input class="jquery-calendear" type="text" datetype="YYYY/MM/DD">
<input class="jquery-calendear" type="text">
<input class="jquery-calendear" type="text" datetype="YY年MM月DD日">
<input class="jquery-calendear" type="text" datetype="YYYY-MM-DD(W)">
取得方法はこれです。
$(INPUT要素).attr("datetype");

追記 2007-11-14-1-0 日付フォーマットの指定方法 コードの書き方候補(2) <hoge value="日付フォーマット">

Calendar Plugin for jQuery 1.2.1 (2007-11-14-1-0) 
http://jsgt.org/lib/jquery/plugin/calendar/20071114-1-0.htm


ふと、<hoge value="YYYY/MM/DD" />も試してみたら使えてしまいました。
どっちにしたらよいかなぁ、、、。

こうです。

<input class="jquery-calendear" type="text"><jquery value="YYYY/MM/DD" />
<input class="jquery-calendear" type="text">
<input class="jquery-calendear" type="text"><jquery value="YY年MM月DD日" />
<input class="jquery-calendear" type="text"><jquery value="YYYY-MM-DD(W)" />
取得方法です。
$(INPUT要素).nextSibling.getAttribute("value")


追記 2007-11-14-1 日付フォーマットの指定方法 コードの書き方候補(1)

Calendar Plugin for jQuery 1.2.1 (2007-11-14-1) 
http://jsgt.org/lib/jquery/plugin/calendar/20071114-1.htm


先日の 2007-11-12-1 日付フォーマットの指定方法 に引き続き、実際のコードの書き方を考えてみました。旧版はINPUT要素のインラインにonclickイベントを書いてそこに書いた関数の引数で渡しましたが、今度は(できればJSとHTMLを切り離したいので)インラインのonclickイベントをなるべく使いたくありません。

でも、INPUT要素にこれといった使えそうな属性もなさそうです。たとえば、titleは目的が違いますし、 value値に書くのも...ですし(^^; 、別途、hidden要素を作るのも冗長な気がしますし、 それより送信時などに副作用が出るのはまずいです。

で、どう書くか?

こうです。

<input class="jquery-calendear" type="text"><!--YYYY/MM/DD-->
<input class="jquery-calendear" type="text">
<input class="jquery-calendear" type="text"><!--YY年MM月DD日-->
<input class="jquery-calendear" type="text"><!--YYYY-MM-DD(W)-->
ポイントは、INPUT要素の直後にスペースも改行も入れずに、たとえば、<!--YYYY/MM/DD-->と書きます。クオート「"」や「'」も使いません。

 あと、これはHTMLコメント部ですので、&と<と>は、実体参照&amp; (&#38;)、 &lt; (&#60;)、&gt; (&#62;) で書く必要があるのが少し面倒ですが、、、まぁ、いっか。日付ですし。

コメントが続かなければ、デフォルトのYYYY-MM-DDでフォーマットされます。

ちなみにこのコメントデータをどうやって取得しているかというと、jQueryの.next()メソッドは使えなかったので、普通にDOMのnextSiblingを使いました。一応、nodeTypeを調べてチェックしていますが、もう少し厳密に取得すべきか、少しだけ迷っています。
 $(INPUT要素).nextSibling.nodeValue


追記 2007-11-13-1 オブジェクトの階層を整理

var ex= jQuery.extend({calendar:{date:{...でコピーした分がすべてjQueryオブジェクト直下に露出して行儀が悪いのでとりあえず jQuery.extend($.fn.calendar,{date:{...でfn.calendar 配下へ放り込んでおきました。$.fn内に露出していた分iniとdrawも整理。

Calendar Plugin for jQuery 1.2.1 (2007-11-13-1)
http://jsgt.org/lib/jquery/plugin/calendar/20071113-1.htm


こうなりました。



簡単にいうと、
 jQuery.extend({test:1}) //$.test  or jQuery.test
と書くと、プロパティ test は、jQueryオブジェクトまたは$ショートカット直下にコピーされて $.test  または jQuery.test となります。ただ、これでは、$直下が散らかるので、
 jQuery.extend($.fn.calendar,{test:1}) //$.calendar.fn.test or jQuery.fn.calendar.test
という風に$.fn.calendarへコピーすることでcalendarの下にすべてのメンバをまとめてみたということです。とはいえ、calendarという名前は一般的すぎないか?という点は、時間があれば、、、。


追記 2007-11-12-e 時点でのオブジェクト構造

ああ、var ex= jQuery.extend({calendar:{date:{...でコピーした分がやはり、行儀が悪いかなぁ、、、。すべて fnへ閉じ込めるべき?

あと、jQuery自体がグローバルへ露出しているのは、$とjQueryだけなんですけれど、$.fnへいろいろなプラグインを流し込めば、それが衝突することはあると思うので、将来のために少し気を遣う必要もある?ない?


追記 2007-11-12-3 インラインモードとドラッグモード
カレンダー出力用のBOX DIVである <div id='jquery-calendar-box'></div>は、デフォルトでは自動出力されてドラッグモードになります。

でもこれを、 もし、あえて、HTML内の好きな場所に置くと、自動的にインラインモードとなり、ドラッグできなくなります。 また、クリック後にもカレンダーは消えません。

定位置にカレンダーを配置しておきたいケース用です。

入力したいターゲットINPUT要素へ一度カーソルを入れてからカレンダーをクリックすると、その要素へ日付が出力されます。

nightlyも更新しました。

Calendar Plugin for jQuery 1.2.1 (2007-11-12-2-e)
http://jsgt.org/lib/jquery/plugin/calendar/20071112-e.htm

<input class="jquery-calendear" type="text">
<input class="jquery-calendear" type="text">

<div id='jquery-calendar-box'></div>


追記 2007.10.12 19:54
  • # 2007-11-12-2 今日class="today" と今月 class="curr-m" を追加
  • # 2007-11-12-1 日付フォーマットの指定方法

Calendar Plugin for jQuery 1.2.1 (2007-11-12-2)
http://jsgt.org/lib/jquery/plugin/calendar/20071112-2.htm


追記 2007.10.12 00:38 nightlyをアップデートしました
Calendar Plugin for jQuery 1.2.1 (nightly)
http://jsgt.org/lib/jquery/plugin/calendar/nightly.htm
同じもの
http://jsgt.org/lib/jquery/plugin/calendar/20071111-1.htm

まだ、起動メソッドの書式などを決めていませんがf^^;、とりあえず、デフォルト設定で良ければ、クラス指定 <input class="jquery-calendear" type="text"> だけで、jsに触らずに使えるようにしてみました。

    
<style> .testclass2 { color:red } </style>

<input class="jquery-calendear" type="text">
<input class="jquery-calendear" type="text">
<input class="jquery-calendear testclass2" type="text">


追記 2007.10.11 01:19 nightlyをアップデートしました

Calendar Plugin for jQuery 1.2.1 (nightly)
http://jsgt.org/lib/jquery/plugin/calendar/nightly.htm
同じもの
http://jsgt.org/lib/jquery/plugin/calendar/20071110-4.htm
一応、構築部のテキスト処理化率を上げて高速化と、IE用focusバグ対応と、CSSはjQueryではなく素直に(誰もが使える)CSSで指定するようにして少し軽く&デザイナーと分業などを考慮しました。


追記 2007.10.10 19:11
また、少し問題発生f^^;。月送りのボタンをカレンダー内へ入れたら、Win IEで見たときに、どうにもクリックがもどかしいので、原因を切り出すために、ちょっと怪しい気がするドラッグとボタンだけの単純なサンプルを作ってみました。

http://jsgt.org/lib/jquery/plugin/calendar/20071110-3jqbug.htm

やはり、連続クリックができません。 ドラッグ対象のElement内のボタンは、Win IEでは、続けてクリックができなくなっているわけです。 うーん、なんか、あれっぽいなぁ、ということで、、、

修正

http://jsgt.org/lib/jquery/plugin/calendar/20071110-3jqbug2.htm

めでたく、解決しました。でも、まだ、納得はいきません。。。。うーむ。jQueryといえども完全を期待するのは無理。でも、許す。(<って、許す権限ないだろ)


追記 2007.11.10
あまりに重たいので、カレンダーテーブルの構築部分からjQueryを順番にはずしてみました。その結果最終的に、テーブルはすべて<tableや<tr><td>といった要素の文字列だけで作成し、構築部では最後にちょっとだけjQueryを使う、というところまで削って、許せるスピードを回復しました(^^;。それでも、構築部以外でjQueryを使うメリットはあります(^^。

http://jsgt.org/lib/jquery/plugin/calendar/20071110-2.htm

チューニング後

http://jsgt.org/lib/jquery/plugin/calendar/20071110-2tun.htm
効率の良いCSSの適用方法を考えないと、、、。


    古籏一浩 ( 2007年11月10日 23:42 )

    とりあえずカレンダープラグインがあるので中身を見てみるといいかも。

    http://jquery.com/plugins/project/calendar-jquery


    高橋 ( 2007年11月11日 01:16 )

    あ、この人、たぶん、英語外の人ですね。私と同じで、navigator.language.substr(0,2)とnavigator.userLanguage;を最初に検査してます(^^;

    でも、同じカレンダーでも作る人によって立ち位置も力点も違って面白いです。

    名前の件でみると、Elementをあえて(?)グローバルに置いているのが少し気になります。これだとせっかくjQueryでprototypeとのコンフリクトを回避してもこれが衝突してしまうような。なんとなく、もったいない。

    ところで、この言語分岐が、
    lng['en'] = {
    month : ['January', 'February', 'March', 'April', 'May', 'June', 'July'
    , 'August', 'September', 'October', 'November', 'December'],
    day : ['S','M','T','W','T','F','S'],
    first: 0 // Sunday
    };
    lng['es'] = {
    month : ['Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto'
    ,'Septiembre','Octubre','Noviembre','Diciembre'],
    day : ['L','M','M','J','V','S','D'],
    first: 1 // First day of week => Monday
    };
    こうなってますけど、これバリエーションを列挙するとかなりになるんですよね。プラグインのデータ集みたいな発展もありうるかも(笑; 

    久しぶりにコードにどっぷり浸ってるので少し幸せな今日この頃です(^^


    【コメント】(←clickで入力欄open)