WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:NN6.2でのondblclickについて

0:[投稿] cafe [2002/07/12 14:59 ][環境:WIN+NN わからない]

はじめまして!
アドバイスをいただきたく書き込みします

BBSでの投稿記事をマウスで取得した座標の位置に表示するように設定しているのですが、NN6以上で、ダブルクリックが使えないようなのです。
DOM対策として以下のように記述しています
if (document.all)
{

}
else if (document.getElementById)
{
X = evt.pageX;
Y = evt.pageY;
document.koroform.opt2.value = X;
document.koroform.opt3.value = Y;
with(document.getElementById["msxy"])
{
style.left = X;
style.top = Y;
}
}

if (document.all) {
document.ondblclick = displayMouseXY;

}
else if (document.getElementById) {
document.onclick = displayMouseXY;

}

現在は、ダブルクリックではとれないので、ワンクリックに設定していますが、ワンクリックで取得すると投稿フォームでクリックするたんびに取得した値がかわってしまうため、変なところに投稿されてしまいます
これをさけるためにダブルクリックで取得したいのですが、DOMではできないのでしょうか?
それとも、これにかわる何かいい方法がありますでしょうか?
よきアドバイスをお願いします
ちなみにサイトURLは以下にあります
テスト中ですので、試してもらってもかまいません
よろしくお願いしますm(__)m
http://cafetime.cside.com/korobo/bbs/korobbs.cgi?form=freebbs

また、mac*nn4.7では、win*IEからの書き込みは、マウスの座標位置が無視され、右に並んでしまい、win*NN6.2からの書き込みはちゃんと座標とおりの位置に投稿されるのです。win*IEからの書き込みもちゃんと座標お通りの位置に並ぶようにできるのでしょうか?
重ねてアドバイスをお願いします


1:[回答] ween [2002/07/12 15:35 ]

DOM2 Event のマウスイベントでは、
イベントハンドラの第1引数に渡される Event オブジェクトの
detail プロパティにクリックの回数が設定されるので
これでダブルクリックを判定できます。
mousedown - mouseup 間にマウスが移動した場合は 0 が設定されます。


2:[回答] ナン [2002/07/12 15:43 ]

ondblclick

ondbclick
とか。


3:[回答] ナン [2002/07/12 15:47 ]

今調べたら、W3C的には、ondblclickが正解らしい。
しかし、N6では、ondbclickで、なぜか上手くいきますね!


4:[質問] cafe [2002/07/12 16:12 ]

さっそくのご回答・・ありがとうございますm(__)m

weenさん>
すみません・・あまりskilがありませんので・・・(本をみながら書いたので・・・^^;)
具体的にどこをどうしたらいいのでしょうか?
アドバイス・・よろしくお願いしますm(__)m

ナンさん>
ondbclickでやってみますね


5:[回答] ween [2002/07/12 21:33 ]

> document.onclick = displayMouseXY;
は、文書がクリックされると関数 displayMouseXY が呼出すという式ですよね。
このとき、イベントの発生した座標や時刻など、
発生したイベントに関する情報をもつオブジェクトが生成されて
引数として displayMouseXY に渡されます。

ここでは、 displayMouseXY がこれを evt で受け取っているので
evt のプロパティが個々のイベントに関する情報ということになります。

発生したイベントがシングルクリックかダブルクリックかを判定するには、
このオブジェクトの detail プロパティを使います。
このプロパティは、マウスイベントの場合にはクリックの回数を表します。
端的に言えば、 evt.detail が 1 ならシングルクリック、 2 ならダブルクリックです。

ということで、具体的には:

else if (document.getElementById && evt.datail==2)

とか

else if (document.getElementById)
{
 if ( evt.datail == 2 ) {
   ... // 処理
 }
}

のような感じかなあと思います。

>>3
> 今調べたら、W3C的には、ondblclickが正解らしい。
HTML の要素の属性なんかは ondblclick ですね。
でも、 W3C の DOM では、イベントハンドラを表すこれらの属性に該当するプロパティは定義されてなかったりします。


6:[回答] ween [2002/07/13 02:25 ]

あ。
誤: datail
正: detail
です。


7:[質問] cafe [2002/07/14 09:37 ]

weenさん>ありがとうございます
今朝からやっていますが、やっぱりだめみたいです(T_T)
そこで、onclickでうまくやる方法を考えてみましたが・・・
今のところ・・これもどこかが変なのか?
うんともすんとも動きません^^;
DOMの場合だけ、投稿フォームに座標を反映させるのではなく、
別フォームに数値をいれる(投稿フォームへは手動入力)という方法をとってみたのですが・・・

    else if (document.getElementById)
    {
        X = evt.pageX;
        Y = evt.pageY;
        document.txtform.opt2.value = X;
        document.txtform.opt3.value = Y;
        with(document.getElementById["msxy"])
        {
            style.left = X;
            style.top = Y;
            style.color = "red";
        }
    }

BODY以下に

現在のマウスの位置
<FORM name="txtform">X:<INPUT size="5" type="text" name="opt2" value="$opt2">
Y:<INPUT size="5" type="text" name="opt3" value="$opt3">
</FORM>

やっぱりどこかが変なんでしょうね


8:[回答] ween [2002/07/14 22:10 ]

とりあえず、 http://cafetime.cside.com/js/msxy.js の49行目:

× else if window.document.onClick = displayMouseXY;
○ else if window.document.onclick = displayMouseXY;

大文字と小文字は区別されるので注意。

それから、 >>5, >>6 は onclick の場合の話です。
(クリックでもダブルクリックでも onclick イベントが発生します)


9:[完了] cafe [2002/07/14 22:29 ]

何度もありがとうございましたm(__)m>weenさん
どうにか、上記7の方法で回避できるようになりましたので、あとはNN4・*の対策を残すのみとなりました
一応、ondblclickについては完了ということにさせていただきます
また、行き詰まったらご相談に伺います

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World