カップラーメン求めてコンビニを探す

今日の帰り道、小腹すいたなぁ…なんだか分からないけどむしょーにカップラーメンが食べたい!!と思った時には、自宅から一番近いコンビニを通り過ぎていて、戻るのもめんどくさかったので新たなコンビニを探す旅に出ました。

駅から自宅に向かう道を、自宅を通り過ぎて探しに行く事に。いつもは駅方面しか行かないので新しいコンビニができてるかも!?と思って自転車を走らせるとそこには…

130戸のマンションとか、やたらゴージャスな家とか、綺麗な家とか山ほど見知らぬ景色が広がってました!おいおい、自宅から徒歩3分の所がこんなになってたのか!反対方向見るとまだ畑が広がっているというのに、高級っぽい住宅街ができてました。

これなら知らないコンビニがあってもおかしくない!ということでズンズン自転車をこぐと…一瞬で田舎に戻ったorz。開発されてる!と思った地域はほんのちょっとで、少し離れたら見知った景色が広がりだしました。当然記憶の中にもそこら辺にコンビニは無く、期待通りカップラーメンが買えるようなお店はありませんでした。

小腹は減ったけど、町並みが大きく変わって綺麗になっていたのを見てワクワクしちゃいました。うーん、たまにはすごい近いけどしばらく行ってない所に行ってみるもんだ(^-^)。ちなみに小腹を満たしたのは自宅にあったご飯+納豆。うまかった!!(笑)

今日は過ごしやすい夜。ちょっと散歩してみた。気持ち良ーし!

フォームが変更された事を知る

昔なら全てのフォーム部品にonchangeを書いていましたけど、attachEventが使える今、ちょいと書き直してみました。

 var types = [
     "text",
     "password",
     "radio",
     "checkbox",
     "textarea",
     "select-one",
     "select-multiple",
     "button",
     "submit",
     "reset",
     ""
 ];

 function attachOnChange() {
     for (var i = 0; i < document.forms.length; i++) {
         var elements = document.forms[i].elements;
         for (var j = 0; j < elements.length; j++) {
             var e = elements[j];
             if (types.join().indexOf(e.type + ",") != -1) {
                 e.attachEvent("onchange", elementOnChange);
             }
         }
     }
 }

 var changedForm= false;
 function elementOnChange() {
     changedForm= true;
 }

 function isChangedForm() {
     return changedForm;
 }

 window.attachEvent("onload", attachOnChange);

このJavaScriptをincludeした画面は、isChangedForm()を呼び出す事により、フォーム部品がひとつでも変更されているか取得する事ができます。このスクリプトを使う場面は画面で1箇所でも入力・変更されていた時に、画面遷移しようとしたら「データが変更されています。保存しますか?」みたいに表示する時だと思います。

ちょっと改良すれば、特定の入力部品だけとか、フォームだけってのはできますね。attachEventを知ってからいろいろ楽になりました(^-^)クロスブラウザを考えるなら、addEventListenerとattachEventを使い分ける処理が必要そうです。

フォームsubmit時にフォーム部品をdisableにする

下記エントリをちょっと改造して作ってみた。そして
http://d.hatena.ne.jp/faerie/20050805#1123218492

送信ボタンを押した後に、しいたけ等で送信を中止すると困ったことになる。リロードすれば送信できるようになるが、そうすると入力内容も消えてしまう。

だから、ボタンを押してしばらくしたら disabled を解除してやるといい。

というすばらしい配慮が載ってたので、それも盛り込んでみた。

 var types = [
     "text",
     "password",
     "radio",
     "checkbox",
     "textarea",
     "select-one",
     "select-multiple",
     "button",
     "submit",
     "reset",
     ""
 ];
     
 function disabledAllElements() {
     activeFormElements(true);
 }
 function enabledAllElements() {
     activeFormElements(false);
 }

 function attachOnSubmit() {
     for (var i = 0; i < document.forms.length; ++i) {
         document.forms[i].onsubmit = disabledAllElements;
     }
 }

 function activeFormElements(disabled) {
     for (var i = 0; i < document.forms.length; i++) {
         var elements = document.forms[i].elements;
         for (var j = 0; j < elements.length; j++) {
             var e = elements[j];
             if (types.join().indexOf(e.type + ',') != -1) {
                 e.disabled = disabled;
                 if (disabled) {
                     setTimeout(enabledAllElements, 3000);
                 }
             }
         }
     }
 }

 window.attachEvent("onload", attachOnSubmit);

submitされてから3秒後にフォーム部品のdisabledが元に戻ります。このサンプルだとフォーム部品全てがdisabledになってしまうので、submitボタンだけでいいよ!という場合は、先頭の配列の中身を"submit"だけにすればOKです。

下記エントリ同様クロスブラウザを考えるならaddEventListenerとattachEventを使い分ける処理が必要だと思いますけど、このサンプルはIEでのみ検証しました。

submit時にdisableにしたボタンが一定期間で戻るサンプル

http://hoso.homelinux.net/hatena/safe_submit.jsp
htmlにペタっと貼ったんじゃ体感できないので、体感できるサンプルを作ってみた。「処理完了!」と出たらサーバサイドの処理が終わっています。2秒と指定すれば、サーバサイドの処理が完了する前にボタンが元に戻り、5秒と指定すればボタンが元に戻る前に画面が切り替わります。

なお、disabledにしたフォーム部品に入力されている値はサーバに飛びません。なのでエントリ画面を照会専用モードで開く時なんか以外は使えないと思います。変数typesを書き換えて、submitボタンだけdisabledになるようにするのが吉ですね!それと、aタグにもこの処理を追加したい…と思ったらちょっと改造するとできてしまいます。aタグのonclickをattachEventすればいいのです(^-^)
#ちょっとショボイバグがあったので下記エントリごと直しました…カッコワルイ対応ですが(^_^;

attachEvent?addEventListener?

たぶんこんな感じで判定できる。

var obj = "イベント登録対象オブジェクト";
if (obj.addEventListener) {
    //addEventListenerでイベント登録
} else if (obj.attachEvent) {
    //attachEventでイベント登録
}

そういえばこのマシンIEしか入ってない(-口-;

KUMA 200枚突破

3日で50枚以上ゲット。本気出せば1日で100枚突破もいけそう。

100万口の応募があったという想定で、自分が応募した時の当たる率を計算してみたんだけど、10%にも満たない確率…。まぁ、飲み物飲むついでに当たったら素敵♪ってくらいだから当たらなくても悔しくないでけどね(^-^)。でもでも、当たったらうれしいなぁ(笑)