box1の中にbox2、box2の中にbox3と入れ子になったDIVタグがあります。
box1の外側へカーソルが外れた際にイベント発生させたくて以下のような
コードを用意しましたが、box1の内側へカーソルを移動し、box2へカーソルが重なった時にもイベントが発生してしまいます。
box1の外側に外れたときだけイベントが発生するようにしたいのですが、どのように記述したらよいのでしょうか?
また、入れ子になったbox2、3でイベントが発生しないよう、イベントを発生させたいオブジェクトとイベントが発生したオブジェクトを比較していますが、もっとスマートな方法はあるのでしょうか?
ご助力お願いいたします。
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
<title>mouseout</title>
<script type="text/javascript" src="/js/prototype.js"></script>
<script type="text/javascript">
<!--
window.onload = function ()
{
Event.observe( $("box1"), "mouseout",out,true );
}
function out(event)
{
var p = Event.findElement(event,'div.parent');
var e = Event.element(event);
if(p!=e) return;
$("tt").innerHTML = e.id+"からmouseout<br />"+$("tt").innerHTML;
Event.stop(e)
}
// --></script>
<style>
#box1{ background: #ccc; padding: 10px; }
#box2{ background: #ddd; padding: 10px; }
#box3{ background: #eee; padding: 10px; }
</style>
</head>
<body>
<h1>mouseout</h1>
<div id="box1" class="parent">ボックス1
<div id="box2">ボックス2
<div id="box3">ボックス3</div>
</div>
</div>
</div>
</body>
<div id="tt"></div>
</html>
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
<script type="text/javascript">
//@cc_on
document./*@if(1)attachEvent('on'+ @else@*/addEventListener(/*@end@*/
'mouseover', function (evt) {
var e = evt./*@if (@_jscript) srcElement @else@*/ target /*@end@*/;
var p = getParent(e, 'id', 'box1');
if (! p && this.f) {
alert('でた~');
this.f = false;
}
if (p) this.f = true;
}, false);
function getParent(node, type, val) {
return node ? (val == node[type]) ? node: arguments.callee(node.parentNode, type, val): null;
}
</script>
なるほど、領域外にロールオーバーしたとき・・・と考えるのですね。
いただいたコードを元に、以下のように prototype.js を使用したコードへ作り直してみました。
ありがとうございます。
window.onload = function ()
{
document.observe( "mouseover", out );
}
function out(event)
{
var p = Event.findElement(event,'div.parent');
var e = Event.element(event);
if( !p && this.f )
{
alert("で、でたー");
this.f = false;
}
if( p ) this.f = true;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript GoogleChart 階層ごとのブロックの長さを個別に設定したい 1 2022/07/06 14:27
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MAX関数を使ってからLEFT JOIN...
-
javascriptテキストBOX色を元に...
-
removeEventListenerについて
-
クリックで色変更後に既に変更...
-
読み込んだQRコードをフォーム...
-
表示・非表示のスクリプトで、...
-
マウスを乗せるとメニュー表示
-
バッチファイルでカウントアッ...
-
removeAttribute()メソッドで削...
-
タブで開いてさらにタブ内をア...
-
console.log結果をhtmlで表示し...
-
折りたたみ部分にアンカーでリ...
-
createElementで作成した要素を...
-
多次元配列を連想配列へ変換したい
-
HTMLタグに複数のクラスを設定...
-
取得した要素がインライン要素...
-
javascriptでスタイルを動的に...
-
getElementByIdの戻り値がnull...
-
document.getElementById( ).st...
-
CSSで指定したwidthをマウスで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MAX関数を使ってからLEFT JOIN...
-
javascriptテキストBOX色を元に...
-
読み込んだQRコードをフォーム...
-
createElementで作成した要素を...
-
removeEventListenerについて
-
IFRAMEの表示/非表示を切り替え...
-
タブで開いてさらにタブ内をア...
-
変数名をどのようにつけるのが...
-
クリックで色変更後に既に変更...
-
表示・非表示のスクリプトで、...
-
HTMLとJavaScriptで作ったタイ...
-
console.log結果をhtmlで表示し...
-
jQueryでクリックされた要素のi...
-
HTMLタグに複数のクラスを設定...
-
指定したパスが現URLに含まれて...
-
iframe内のリンクが飛ばないの...
-
背景色を透明化
-
テキストエリア内の一部の文字...
-
変数内容をHTML内で表示する方法
-
classの中の<a>タグにidを追加
おすすめ情報