リンクタグについて



0   名前: yousay : 2006/07/12(水) 21:45  ID:94qqcWEz
<A href onClick="window.open ('http://***,'newwin');">文字</A>

上のリンクタグを使いたいのですが。。。

リンクはちゃんとなりますがマウスをオンした場合にテキスト入力時のマウスになって
手のマウスになりません。色も変わりません。
どうすればよいのでしょうか?
よろしくお願いします。

1   名前: カヅサツ ◆ThCi95HEzw : 2006/07/12(水) 21:45  [URL]  ID:O5hEMlpW
<a href="http://www.google.co.jp" onClick="window.open (this.href,'newwin');">文字</A>

2   名前: Pid : 2006/07/12(水) 21:45  ID:fiNQ2sMM
ページの移動をさせないようにするには return false; を追加ですね[*]。



----

以下はほとんど雑談なので興味のない方は読み飛ばして下さって結構ですが,

a 要素ノード(HTMLAnchorElement)は,「文字列として評価されると href 属性値を返す」という特殊な性質を持っています。ですから今回の場合は,

<a href="URI" onclick="return ! open (this); ">..</a>


のように this をそのまま渡しても構いません(もちろん,.href まで書いた方が無難ではあります)。
http://www.w3.org/TR/DOM-Level-2-HTML/ecma-script-binding.html



また,ブラウザのデフォルトイベントをキャンセルするには,DOM Events 的には [*] のやり方ではなく,event.preventDefault() を呼び出します(Mozilla/Firefox,Safari,Opera は対応していますが,IE は不可です)。

<a href="URI" onclick="event.preventDefault (); ">クリックしても移動しない</a>


イベントフロー中に,どれか一つのイベントリスナで preventDefault() が実行されれば効果を発揮します。同じイベントフロー中に,デフォルトイベントを再び有効にすることはできません。


ついでに,eventTarget.dispatchEvent()(イベントフロー中に,ノードに直接イベントを渡すメソッド)によって実行されたイベントリスナで event.preventDefault() を呼び出した場合,dispatchEvent() は false を返します。したがって,

<a href="URI" onclick="return document.getElementById ('sample').dispatchEvent (event);  ">
クリックすると一見無関係なノードでイベントを実行させ,さらに preventDefault() が呼び出されていたらページの移動はしない
</a>


のような,新旧混ざった書き方も可能ではあります(昔のコードを流用しなければならない場合など)。

3   名前: カヅサツ ◆ThCi95HEzw : 2006/07/12(水) 21:45  [URL]  ID:O5hEMlpW
> ページの移動をさせないようにするには return false; を追加ですね[*]。

わーすーれーてーたー。

4   名前: Pid : 2006/07/12(水) 21:45  ID:7ZLUWR5F
>>2
> onclick="event.preventDefault (); "
> onclick="return document.getElementById ('sample').dispatchEvent (event);

ごめんなさいごめんなさい,これだと移動してしまいますね。これらのサンプルは撤回します。

要するに何が言いたかったのかと言いますと,a 要素ノードを a としたとき,


★ DOM Events の場合

a.addEventListener ('click', function (event) { return false; }, false);


のように,イベント属性と同じつもりで false を返しても,デフォルト動作をキャンセルすることはできません。

a.addEventListener ('click', function (event) { event.preventDefault (); }, false);


のようにしなければなりません。古いイベントハンドラを DOM Events に合わせて書き換える場合は注意して下さい。


★ IE の場合

<a href="URI" onclick="return false; ">...</a>
<a href="URI" onclick="event.returnValue = false; ">...</a>
a.onclick = function () { return false; };
a.onclick = function () { event.returnValue = false; };
a.attachEvent ('onclick', function () { return false; } );
a.attachEvent ('onclick', function () { event.returnValue = false; } );
a.attachEvent ('onclick', function (e) { e.returnValue = false; } ); // IE6 以降?


いずれの方法でもデフォルト動作をキャンセルできます。なお,attachEvent で登録されたイベントハンドラの実行順序はランダムですが,どれか一つでもあればデフォルト動作をキャンセルします。

http://devedge-temp.mozilla.org/library/manuals/2000/javascript/1.3/guide/evnt.html#1010420
http://msdn.microsoft.com/workshop/author/dhtml/reference/events/onclick.asp



----

以上,イベントハンドラ・イベントリスナを HTML ソースから切り離して書く場合,イベントモデルの違いにご注意下さい,と言うことでした。

スレ違いの雑談を長々とすみません。以下本題に戻ります(たぶん)↓

5   名前: yousay : 2006/07/12(水) 21:45  ID:94qqcWEz
みなさんいろいろな意見アドバイスありがとうございました。
以下のタグで解決しました。

<A href="URL 1" onclick="window.open('URL 2');">文字</A>

一覧へ戻る