
jQueryでネスト構造になっているリストがクリックされた時に、そのidを取得するプログラムを作っています。
第一階層は取得できるのですが、第二階層の<li>をクリックすると二重に処理が動いたり、親要素の値が取得されてしまったりしてうまく動きません。
jQueryでの取得方法を教えていただければと思います。
[HTML部分]
<ul id="sample">
<li class="parent" id="1-1">項目1−1
<ul class="children">
<li class="chaild" id="2-1"></i>項目2-1</li>
<li class="chaild" id="2-2">項目2-2</li>
<li class="chaild" id="2-3">項目2-3</li>
</ul>
</li>
<li class="parent" id="1-2">項目1−2</li>
</ul>
[jQuery部分]
<script type="text/javascript">
$(document).on('click', '.parent , . child', function (e) {
var id = $(this).attr("id");
alert(id);
});
</script>
onクリックのセレクタの指定をいろいろと試してみましたが、下記のような結果となりうまく動作しません。
('.parent , . child')
親は正しくidが取得できたが、子はすべて1-1となってしまい、正しく取得できない。
('li')
親は正しくidが取得できたが,子は2-1と取得できてから、もう一度1-1と取得され、2回処理が動いてしまっている。
('.parent')
親は正しくidが取得できたが、子は全て1-1と取得される。
('#sample>.parent li')
子要素は正しく取得できるが、親要素が取得できない。
No.1ベストアンサー
- 回答日時:
クリックしたliだけつかみたいなら、e.stopPropagation()してバブリングを抑止してください
<script>
$(document).on('click', 'li', function (e) {
var id = $(this).prop("id");
console.log(id);
e.stopPropagation();
});
</script>
<ul id="sample">
<li class="parent" id="1-1">項目1-1
<ul class="children">
<li class="chaild" id="2-1">項目2-1</li>
<li class="chaild" id="2-2">項目2-2</li>
<li class="chaild" id="2-3">項目2-3</li>
</ul>
</li>
<li class="parent" id="1-2">項目1-2</li>
</ul>
[jQuery部分]
No.2
- 回答日時:
こんにちは。
すでに回答は出ていますが…
マウスイベントは伝播しますので、上位要素(祖先要素)であればそのイベントをとらえることが可能です。
ご質問の場合は、それを全てその要素がイベントの発生源として処理してしまっているのが原因かと思います。
例えば最も上位のdocumentレベルで監視する場合は、イベントの発生源のidを取得するというようにすれば重複はおきません。
$(document).on("click", function(e){
if(e.target.nodeName == "LI")
alert($(e.target).prop("id"));
});
上記は、document内全てのLI要素が対象となりますが、範囲を限定したい場合(例えばsampleクラス内のみなどの場合)は、documentの代わりにその要素で監視すれば同様のことが可能になります。
ご提示のように、jQueryの構文でLI要素のイベントのみを取得するような場合には、イベントの発生源と取得要素が同じ場合にだけ処理するようにすることでも特定が可能だと思います。
$(document).on("click", "li", function(e){
if(this == e.target)
alert($(this).prop("id"));
});
もちろん、イベントの伝搬を制御しても良いのですが、例えば、同じ仕組みで別のスクリプトを組み込んだ際に、うまく動作しなくなる可能性があることを理解した上で行ってください。
ついでながら、要素のidは数字で始まるのはNGだったような・・・(←曖昧な記憶ですが)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
div要素内の画像およびテキスト...
-
複数の画像をランダム(シャッ...
-
大量のチェックボックス状態取...
-
jqueryのsortableで一部ソート...
-
jqueryのプラグインflexslider...
-
タブメニューを上下に設置
-
jQueryのeqで最後からn番目以降...
-
JS <a></a>タグ内のリンク先ア...
-
jQueryでヒアドキュメントを使...
-
javascriptテキストBOX色を元に...
-
1枚の画像をクリックすると複数...
-
JSPでの画像ファイル表示
-
MAX関数を使ってからLEFT JOIN...
-
WEBページ立ち上げ時に1回のみ...
-
文字をクリックしたら別の文字...
-
スクロール可能なチェックボックス
-
jspでcssが読み込めない
-
textareaに画像を表示したい
-
リンクで違うページの指定箇所...
-
クリックした自身の画像を別画...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
jqueryのsortableで一部ソート...
-
どの<li><a> が押されたか判別...
-
同一ページ内で、任意の文字列...
-
タブ切り替えの初期表示について
-
jQueryスライドメニューの初歩...
-
jQueryのeqで最後からn番目以降...
-
javascriptでフォーカスを当て...
-
<li></li>の数を制限
-
【javascript で動的に a タグ...
-
JS <a></a>タグ内のリンク先ア...
-
『JavaScript Accordion』について
-
カレントページ aタグではなく...
-
jQueryプラグインのメガドロッ...
-
jQueryで記事を6列表示にした...
-
大至急!!HPビルダー16の専...
-
jquery 親要素以外の取得
-
下記のようにクリックすると、...
-
jQueryでネスト構造の<li>がク...
-
ページの上下に同じタブメニュ...
-
jQueryについて質問なのですが...
おすすめ情報