- 2009-10-09 (金) 0:32
- JavaScript
うちの会社はちょっとまぁ、 古きを重んじる会社な訳でして。
<a href="hoge.html" onclick="window.open'('hoge.html', 'myWin', 'width=300, height=500');">クリック</a>みたいなのがあったのですが。
ソースが見づらくなるのでとっても嫌なのです。
jQueryとか使えば一発ですし、そうじゃなくてもclassとかつけてちょこちょこやれば済む話なんですが、 それはなんか違うな、と。
というわけでせめて、
<a href="hoge.html" onclick="hoge();">クリック</a>という形でなんとかお願いできませんか、と。
そういうわけで早速、
短絡的思考を元に
var hoge = function(){ window.open(this.href, 'myWin', 'width=300, height=500') }結果:動かず
まぁそりゃそうですね。 この時点で this の指すものは変わってしまってる訳ですから。
思いつきで
var hoge = function(event){ if(!event) event = window.event; event.preventDefault(); var href = (event.target) ? event.target.parentNode.href : event.srcElement.parentNode.href; window.open(href, 'mywindow', 'width=300, height=500); }
結果:動かず
実はこれ、少し前にやろうとしてたのを思い出して 改めてやったやつなんですが。 なぜいきなり引数に event を入れたのか。 よく覚えていないのです 。 多分
$('#hoge').click(function(e){});的なノリでやりたかったんだと思います。
arguments.callee.caller を使って
var hoge = function(){ var e = arguments.callee.caller.arguments[0] || window.event; e.preventDefault(); var href = e.target || e.srcElement; alert(href); window.open(href, 'mywindow', 'width=587, height= 800, menubar=no, toolbar=no, scrollbars=yes');
結果:IE以外では動いた
おぉ。。やっと進みました。 とりあえず呼び出し元が onclick属性に関係する何かしらなのではないかということで、 caller を使って呼び出し元を探してみたところビンゴ。 引数に event を持った関数が返ってきました。 なので、その関数の第一引数、つまり event を取得することで目標達成。
しかしIEでは動かず・・・。 詳しく見る前に時間が来てしまったのであれですが、 そもそも event の取得の時点でおかしい模様。 明日以降また時間ができた時にでも調べてみることにします。
今日はここまで。
ところで、 callee ってなんて読むんでしょう。 こーるいーいー? こーりー? どうでもいいですか、そうですか。
追記:14:10 2009/10/09 タイトルちょっと変えました。
var hoge = function(){ var event = (window.event) ? window.event : arguments.callee.caller.arguments[0]; var self = event.target || event.srcElement; alert(self.nodeName); // A window.open(self.href, 'myWin', 'width=300, height=500); };IE6, IE7, Opera で動作確認とのこと ■
でもIE8では window.open のあたりがうまくいってないのか _self に表示されちゃってます。 なんでだろう。。
- Newer: 【PHP】 file_get_contentsで躓いた
- Older: とりあえず
Comments:2
- gecko 09-10-10 (土) 11:45
-
>でもIE8では window.open のあたりがうまくいってないのか
IE Tester?
- ゆう 09-10-11 (日) 0:26
-
スタンドアローン版のIE8 正式版とは挙動が違うのかもしれないですがね。。
Trackbacks:1
- Trackback URL for this entry
- http://unolabo.boo.jp/archives/2009/10/09-onclick%e5%b1%9e%e6%80%a7%e3%81%a8%e3%82%a4%e3%83%99%e3%83%b3%e3%83%88.html/trackback
- Listed below are links to weblogs that reference
- 【JavaScript】 onclick属性とイベント from うのらぼ。
- pingback from < /gecko >:げことじ。:日常からWEBまで: - 【javascript】onclickされた時のthis(自分自身)を取得したい。 09-11-09 (月) 14:00
-
[...] こっちのほうが考察がありますが。彼と一緒に考えた際に考えたこととかを以下に。 <a id="testID" onclick="hoge()" href="javascript:void(0);">test</a> [...]