NNで<a href="javascript" onDblClick="func()">する方法

[上に] [前に] [次に]
あや [E-Mail] 1999/08/12(木) 11:03:23
たびたびすみません。
NNで、
  <a href="javascript:funcA()" onDblClick="funcB()">
  clickでfuncA,doubleclickでfuncBが起動します
  </a>
としたいのですが、
funcBで
  top.window.location.href="http://www.***.co.jp/";
としているのにジャンプしません。
funcBには来ているようなのですが…

なぜなんでしょう?
回避方法はありませんか?

あっち 1999/08/12(木) 12:18:35
すみません。他の件で質問に来ていたのですが、ちょっと立ち寄ってみました。
質問を質問で返すようで申し訳ないのですが、
<a href="javascript:funcA()" onDblClick="funcB()">
でリンクを張る際になぜonDblClickを使っているのでしょうか?
リンク先をクリックするのでonClickイベントを使用するのでは?

Nobu3 1999/08/12(木) 12:25:55
funcAには何を書いてるんですか?

基本的にクリックした時にはfuncAを実行するので、併用するのは無理があるような・・・。

function funcA(){
status='AAAAA';
}
function funcB(){
location.href='hoge.htm';
}

これだと動きましたが。(Win95+NN4.04)

あや [E-Mail] 1999/08/12(木) 12:53:53
RES,ありがとです◎

あっちさんへ
 ちょっと質問の意味がわからなかったんですが、
 やりたいことは、
 シングルクリックで表示を変更し、
 ダブルクリックでリンク先へ飛ぶ、ということなんです。
 「リンク先をクリックするのでonClickでは?」とはどういう意味でしょうか?

Nobu3さんへ
 フレームがきってあって、windowのtopに表示させたいんです。
 これだと、カレントのフレームに表示されちゃいますよね (^_^;)
 IEでは動くので、NNでもいかないかなーと思ってたんですが…

ややこしくて恐縮ですが、よろしくお願い致します。

Nobu3 1999/08/12(木) 13:23:07
あ、すいません。そう言う意味で省略したわけじゃなかったんですが・・・(^^;;;

funcA()の中身が問題なんです。
「ステータスバーに表示するくらいならできますよ」って意味です。
funcB()(ダブルクリック)の前にfuncA()(クリック)を実行してしまうので、
例えば「alert()」なんかを使っていると、ダブルクリックができなくなりますし、この場合はIEでも動きません。

回避可能な策としてはfuncA()を
setTimeout('funcAA()',500);
にして、ダブルクリックされるまで処理をしない方法が考えられます。

ことみ 1999/08/12(木) 13:50:21
onClick=にA,Bを並列に書いて、AにsetTimeoutすればいいんじゃないの?

Nobu3 1999/08/12(木) 14:06:21
半端な回答だったのでサンプルを書きます。

function funcA(){
setTimeout("alert('AAA');",500);
}
function funcB(){
top.location.href='hoge.htm';
}

クリックもダブルクリックもちゃんと動いてます。(Win95+NN4.04)

あっち 1999/08/12(木) 14:50:31
あっ、どうもすみません。
勘違いしてました。
どうやら上記のnobu3さんのソースの動作を確認してみると、
DblClickイベントを行った後「Clickイベントが2度」行って
いるようです。(Win95+NN4.06にて確認)
ダブルクリックした後、locationでURLに飛んでいるのでClick
イベントは発生しないようですが、funcBのURLのところに
存在しないURLを試しに入れてみると、エラーメッセージの後に
'AAA'が2回表示されます。

うーん、ブラウザの違いってほんと面倒くさいですね。
(私も業務で携わっているもので・・・ (^^;; )

あや [E-Mail] 1999/08/12(木) 21:40:10
みなさん、どうもありがとです。

お教え頂いたこれらの情報で問題が解決してるのかどうか
確認に時間がかかりそうなので、
ひとまずRESをしました。

やってみて、結果を休み明けにでもUP致します。

Nobu3 1999/08/13(金) 03:01:32
あ〜なるほど。気付きませんでした。>あっちさん
移動できなかったら2度実行されるとは・・・。
クリックとダブルクリックの併用は難しいですね・・・。

あっち 1999/08/15(日) 01:01:02
>あやさん
大して役にも立てないのに割りこんできて
どうもすみませんでした。
なんか私の方が勉強になってたりして・・・。(^^;;

>Nobu3さん
しかしあなたはかなり凄い方だと思います。
正直、ClickイベントにSettimeoutを使うという方法は私の知識では
浮かびませんでした。本当に敬服します。(^o^)

toshi [E-Mail] [HomePage] 1999/08/15(日) 14:48:40
こんなのはどうでしょうか。Nobu3さんのを少し変えただけですけど。

<script language="JavaScript">
t=0;

function funcA(){
setTimeout("sclick();",500);
}

function funcB(){
t=1;
alert('DoubleClicked');
return false;
}

function sclick(){
if (!t) alert('SingleClicked');
t=0;
}

</script>
<a href="javascript:funcA();" OnDblClick="funcB();">Click!</a>

ぼくのところではちゃんと動いてます。(Win98+IE5)

toshi [E-Mail] [HomePage] 1999/08/15(日) 14:50:22
すいません。
funcB()のreturn false;は必要ありません。

Nobu3 1999/08/15(日) 23:52:19
後学のために少し実験をしてみました。
function funcA(){
document.fm1.tx1.value+='A';
}
function funcB(){
document.fm1.tx1.value+='B';
}

この結果、IE5では「AB」、NN4.6では「ABA」がダブルクリックで返って来ました。
ただ、リンクの方で、「ondblclick="funcB();return false;"」とすると、NN4.6でも「AB」となりました。

あや [E-Mail] 1999/08/17(火) 08:28:14
あやです。
あっちさん、Nobu3さん、ことみさん、toshiさん、
いろいろと教えてくださってありがとうございました。

で、具体例が書いてあってシンプルだった
function funcA(){
setTimeout("alert('AAA');",500);
}
function funcB(){
top.location.href='hoge.htm';
}
を試してみたんですね。
結果はよかったんですが…
なぜか、何もしないでもダブルクリックで飛ぶようになっちゃいました (-_-;)?
リンク周りはいじってない積もりなんだけどなぁ×

それで質問なんですが、
(1)setTimeoutを使わなくてもうまくいくことがあるのはナゼ?
(2)settimeout('funcA()',500)とすると、500mm秒後にfumcAが
  呼び出されるように思うのですが、どうしてコレでいいんですか?
NNはまったくわかりません。
当たり前のことかもしれませんが、どうぞよろしくお願い致します。

Nobu3 1999/08/17(火) 09:33:29
うまくいくのが不思議ですか?

質問のほうは「バグ」って説明で納得できますか?
ダブルクリックを処理する場合は、先のクリックが処理されると、本当はまずいのです。
で、使わなくてもうまくいくのは、処理の数とかタイミングだと思います。
実際に何をするのかわかりませんが、画像を変えたり何行も計算させたりしている場合は、そちらの処理のせいでマウスのダブルクリックが認識されないのだろうと思います。
それで、最小の命令としてsetTimeoutを使って処理を遅らせるのは同かと思ったんですが・・・。

・・・あってるんでしょうか(笑)
勘です。
ま、処理が曖昧なので(起動直後などは処理が遅いのかダブルクリックを認識しない事がある)使わないほうがいいとは思いますが・・・。

あや [E-Mail] [HomePage] 1999/08/17(火) 12:44:39
[[解決]]
あやです。

そっかー。バグかー。
Timeoutの件も納得しました。
奥が深いですね (^_^;)

もし興味がおありなら
記述したURLを実際にNNで参照して頂くと
私がどんなことをしたいのかがわかると思います。
暇死しそうなときにでも評価してみてください。

本当にありがとでした o(^-^)o

[上に] [前に] [次に]