onclick属性のスコープチェインにthisが追加されてる?

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

onclick属性のスコープチェインにthisが追加されてる?

onclick 属性問題について - IT戦記

これを onclick 属性なしで「神経質に」やると以下のようになる

ry

もちろん、これはおおげさな例だけど、 onclick 属性を使わないことによって本質的ではないことをたくさん書かないといけない

id:amachangの↑を見て、ロールオーバーのスクリプトを思い出した。時々こういう遊びをする人なのかな?

というのはどうでもいい話で、僕が関心を持ったのは↓のコード。

onclick 属性問題について - IT戦記

<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

トラックバック

コメント

コメントの投稿

お名前
コメント
編集キー
 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。