ログ日記

作業ログと日記とメモ

prototype.js

IEが重い

firefoxだと重くないのに、IEだと激重。 getElementsByClassName()は重すぎだから、getElementsByTagName()で絞ってからhasClassName()で検索すると早くなった。 あとEvent.observe(element, 'mouseover', func) が重い。 軽くするためにはHTMLのタグに直接…

innerHTML

JavaScriptでだいぶハマってた。 単純な文字列置換でもミスるし・・。Ajaxで取ってきたテキストがIEだとタグ名が大文字になるのね。 あとinnerHTML。 prototype.jsを使うとHTMLElementが拡張されている。 タグには _extended="true" が追加されている。 その…

イベントハンドラの引数

bindAsEventListener()で追加の引数を受け取れないと悩んでいた。最新のリビジョンを見たら理解した。*1 最新バージョンではcall()を使わずにどちらもapply()でやっていた。 で、やっぱりbind()ソースの args.concat($A(arguments)) の部分が理解できない。a…

prototype.jsのbind

hawkさんにコメントをいただいたのでコードの見直し。 どの部分で問題になってたのか忘れてしまったorz でも数カ所で obj.func1 = function(element){ var obj = this; Event.observe(element, 'onclick', function(e){ obj.func2(); }); } obj.func2 = func…

デフォルト動作のキャンセル

onsubmitなどでreturn false;を返すと、デフォルトの動作をキャンセルできる。 で、これもEvent.observe()では無効なのか。 同じイベントに何個でもハンドラを登録できることを考えると普通の動きなのかな。

prototype.jsで綺麗なコードを書く

hawkさんにかなり助けてもらいつつ、コードが綺麗になってきたのでまとめてみる。 Ajaxイン・アクションの復習も兼ねて。 理解できてくると段々楽しくなってくるね。ブラウザの挙動の違いは困るけどprototype.jsが結構吸収してくれてるぽい。 HTMLからJavaSc…