Kentaro Kuribayashi's blog

Software Engineering, Management, Books, and Daily Journal.

WinIE が…、その後

「WinIE が…」@ 2003-11-13 17:40 (Thu)でごちゃごちゃ書いてたことに関して、掲示板にて古林さんに教えていただきました。

そもそも、イベントをon**属性という形で追加すること自体がよろしくないのでは、と。

生成された要素にイベントを附加させたい場合は、addEventListener 又は attachEvent メソッドなどを用いるのがベターかと。

[ antipop:BBS @ 1107 「要素とイベント」 より]

やっぱりよろしくなかったですか…。WinIE さん、悪口いってすみませんでした…。いや、明らかにダッセェことしてるなぁとは思ったものの、じゃぁどうすればいいかということがさっぱりわからなかったので、setAttribute('onclick', 'onclick イヴェント時に呼びたい関数名'); としてたのです…。ともあれさっそく教えていただいたaddEventListener 又は attachEvent メソッドってのを調べてみる。

なにいってんのか全然わかんねんだよ! 糞ッ!!! と己をののしりつつ、なんとか書いてみたら、Moz, Opera ではちゃんと動いた。しかし、やっぱり WinIE が無視しやがる!!! またかよ、糞がっ!!! もう謝らねぇ!!! やっぱおまえは糞だよ!!! さらに調べは続く。

どうやら WinIE はDOM2 Events を一切サポートしていないらしく、代わりだかなんかしらんが attachEvent メソッドが用意されているらしい。そこで「Hawk'sW3L: DOM2 Events 解釈 -> 補足:Internet ExplorerにおけるatachEventの使用」を参考にして、WinIE の時は attachEvent を、その他の時は addEventListener を使うことに。

今度こそ大丈夫だと思った。しかし!!! やっぱり WinIE で動かない…。なんでだよ…。ところで、生成される「続きを読む」を HTML で書くと例えば以下の通りになる。

<p class="showMoreText" id="switch_moreText_031112_2"><a href="#moreText_031112_2">続きを読む</a></p>

上記の要素のうち、p 要素にイベント・リスナを設定しているので、「続きを読む」というリンクをクリックしたとき、window.event.srcElement.id には p 要素の id 属性の値が入るんじゃないのか? 違うのか? 違うのかぁぁぁぁぁぁっぁぁ!!! なんで a 要素が window.event.srcElement の値として返るんだよ!!! なんのための attachEvent なんだよ! 糞っ!!! 仮にそれが仕様的に正しくても、そんなふざけきった挙動はこの俺様が認めねぇ!!!(この辺、わけがわからなくなって、単にやつあたりしてるだけです。でも、なんか釈然としないなぁ。)というわけで、これでまた 20 分ほど時間をつぶした…。

ともあれ、そういうあれこれを経て、以下に第 3 のテスト・ページを。

疲れ果て過ぎたので、具体的にどこを手直ししたかは説明し得ない…。死ぬる。

…とか書いてるうちに、そふぃあさんにも言及していただいたことに気付きました。

controlClientSideViewって名前から察するにメソッドっぽいけれど、メソッドのインスタンスを作るという発想が抽象的に理解しにくいというか、prototype経由で参照されるメソッドの中に特定のインスタンス(CCSV)への参照があるのはいかがなものかと。

[ Hatena::agenda @ 2003-11-13 より]

この文章の前半部分は僕の無能のせいで意味がわからないのですが(例えば ClientSideViewControler という名前だったらいくらかはマシなのでしょうか…そういう問題じゃないか)、後半部分については「これは多分というか絶対に間違ってるよなぁ、でもこうしないと動かない…」とか思いつつ書いたものです…。あぅ。修行が必要であるようです…。