onclick属性のスコープチェインにthisが追加されてる?
- 2008-05-17
- カテゴリ: Client Side
- タグ: JavaScript Tips トラックバック 不覚
これを onclick 属性なしで「神経質に」やると以下のようになる
ryもちろん、これはおおげさな例だけど、 onclick 属性を使わないことによって本質的ではないことをたくさん書かないといけない
id:amachangの↑を見て、ロールオーバーのスクリプトを思い出した。時々こういう遊びをする人なのかな?
というのはどうでもいい話で、僕が関心を持ったのは↓のコード。
<a id="hoge" href="/hoge" onclick="
var req = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('MSXML2.XMLHTTP');
req.open('GET', href);
req.send(null);
return false;
">click</a>
この中の、
req.open('GET', href);
の部分。onclick属性の中でhrefって書くだけでhref属性の値にアクセスできるの?
これは知らなかった。てっきり、this.hrefってやらないといけないと思っていた。
Firefoxでいろいろと挙動を見てみると、with (this) { ... }で括ったような挙動をしている様子。
<a id="id" title="title" class="class" href="/href" onclick=" alert(id); // id alert(title); // title alert(className); // class alert(href); // http://localhost/href alert(innerHTML); // click alert(style === this.style); //true alert(appendChild === this.appendChild); //true return false; ">click</a>
実行: click
これは知らなかった。一応IE6, Firefox, Opera, Safari 3.1では動くみたいだけど、どこかで標準化された挙動だったりするのかな?そこらへんを調べてみたほうがいいかも。
追記
別ウィンドウで表示するスクリプトを書くときに、
<a href="foo" onclick="return !open(this.href)">Foo</a>
ではなくて、
<a href="foo" onclick="return !window.open(this.href)">Foo</a>
というように、window.openまで書かなければいけない理由が分かった。単にopenと書くとthis.openを見に行ってしまっていたんだな。納得。
<a href="foo" onclick="return !window.open(href)">Foo</a>
今後は↑のように書こう。これならtarget="_blank"と書くのと大して労力が変わらないね。別ウィンドウで開くことの是非はともかくとしておいて。
トラックバックURL
- http://liosk.blog103.fc2.com/tb.php/116-c833f779

