javascript
July 05, 2008
Sabel JS - DatePicker(Sabel.Widget.Calendar)
Sabel 1.1で追加されるSabel.Widget.Calendarのサンプル。
カレンダーで日付を選択し、その選択された日付をインプットに適用するDatePicker.jsを書いてみた。
* 実際にサンプルのように表示するにはSabelに含まれるcssや画像が必要
カレンダーで日付を選択し、その選択された日付をインプットに適用するDatePicker.jsを書いてみた。
DatePicker.js
function datepicker(inputs) {
Sabel.Array.each(inputs, function(input) {
var div = document.createElement("div");
div.style.position = "absolute";
div.style.zIndex = 100;
document.body.appendChild(div);
var self = {
element: Sabel.get(input),
calendar: new Sabel.Widget.Calendar(div, {
callback: function(date) {
self.element.value = date.join("-");
}
}),
render: function() {
self.calendar.render();
}
};
div.style.top = Sabel.Element.getCumulativeTop(self.element) + "px";
div.style.left = Sabel.Element.getCumulativeLeft(self.element) + "px";
self.calendar.WeekDays = ["日", "月", "火", "水", "木", "金", "土"];
self.element.observe("mousedown", self.render);
});
}
インプットのidをdatepicker()関数に渡すだけで使用できる(簡単に使えるようにしているため、任意のタイミングでカレンダーを消すなどの処理はできない)。インプットをクリックすると、そのインプットの位置にカレンダーが表示され、日付をクリックするとインプットに年-月-日が入る。
<script type="text/javascript" src="Sabel.js"></script>
<script type="text/javascript" src="DatePicker.js"></script>
<script type="text/javascript">
new Sabel.Event(window, "load", function() {
datepicker(["inputid1", "inputid2", ...]);
});
</script>
動作の様子はこちら。* 実際にサンプルのように表示するにはSabelに含まれるcssや画像が必要
July 04, 2008
June 20, 2008
mailtoを使用する際のスパム対策
HTMLでメールアドレスを素で書くとスパムロボットに拾われるため、JavaScriptを使ったスパム対策をする。
今回利用したスクリプトがこちらで、ほんの少し改造して使いやすくした。
使い方はCryptMailto.jsを読み込み、idを振った空のタグを用意し、popup_mailer()関数にアカウント名・ドメイン名・idを渡す。
例えばHTMLは次のようになる(ソース上にメールアドレスが現れない)。
今回利用したスクリプトがこちらで、ほんの少し改造して使いやすくした。
使い方はCryptMailto.jsを読み込み、idを振った空のタグを用意し、popup_mailer()関数にアカウント名・ドメイン名・idを渡す。
例えばHTMLは次のようになる(ソース上にメールアドレスが現れない)。
<p>
お問い合わせ先: <span id="info"></span>
</p>
<script type="text/javascript" src="/js/CryptMailto.js"></script>
<script type="text/javascript">
popup_mailer("info", "example.com", "info");
</script>
サンプルはこちらで。
June 15, 2008
Javascript - mouseover, mouseout
Javascriptでdivなどのmouseoverやmouseoutイベントを扱う際、そのdivが他の要素を内包していると厄介な挙動をする。
IEでは以前からonmouseenterやonmouseleaveがあるようで、これを使うとbやcは関係なく、aに入った時と出た時だけイベントが発生してくれる。
他のブラウザでも同様の振る舞いを実現するにはそれ用の実装をする必要があるが、Sabel JS(Sabel 1.1以降)だと以下のようにできる。
<div id="a" onmouseover="alert('over');" onmouseout="alert('out');">
<div id="b">
<div id="c"></div>
</div>
</div>
例えば上記のように、a内にbがあり、b内にcがある状態で、aのmouseover, mouseoutイベントでアラートを表示すると、マウスがb上に移動すると一度outし直後に再びoverする。c上に移動した時も同様。IEでは以前からonmouseenterやonmouseleaveがあるようで、これを使うとbやcは関係なく、aに入った時と出た時だけイベントが発生してくれる。
他のブラウザでも同様の振る舞いを実現するにはそれ用の実装をする必要があるが、Sabel JS(Sabel 1.1以降)だと以下のようにできる。
<div id="a">
<div id="b">
<div id="c"></div>
</div>
</div>
<script type="text/javascript">
var a = Sabel.get("a");
a.observe("mouseenter", function(){ alert('over'); });
a.observe("mouseleave", function(){ alert('out'); });
</script>
動作の様子はこちらで。