内側のdivをクリックしないようにして、外側のonClick関数を呼び出さないようにする

可能重複:
  ハイパーリンクがクリックされたときに親コンテナのクリックイベントが発生しないようにする< a>

私は持っています

<div onClick="someJScode();">
  ...
  <div></div>
  ...
</div>

内側のdivをクリックしたときに someJScode()を呼びたくはありません。これを行う方法?

0
nl ru de
私たちはここにあなたのためのコードを書いていません。ここでは、コードのデバッグを支援します。あなたが試したことを私たちに教えてください。
追加された 著者 Ryan Beaulieu,

2 答え

$( 'yourinnerDiv')click(function(e){e.stopPropagation()});

This will stop click event bubbling up the DOM.
http://api.jquery.com/event.stopPropagation/
https://developer.mozilla.org/en/docs/DOM/event.stopPropagation

4
追加された
@ ic3b3rg:この回答はjQueryを使用し、jQueryが処理します。
追加された 著者 Felix Kling,
jqueryを使用してhesを仮定します。もしそうなら、彼は.onを使うべきであり、.click〜議論はできない。ショートカットはOKです
追加された 著者 Kai Qing,
クロスブラウザコード(IE <9)を追加
追加された 著者 ic3b3rg,
@FelixKling知っておいてよかった!ロールバックされる。
追加された 著者 ic3b3rg,
ありがとう、ありがとう。 stopPropagation()について知らなかった
追加された 著者 burtek,

あなたはこれを試すことができます:

HTML

<div onClick="someJScode();" class="parent">
  <div class="child" onclick="childCallback(event)"></div>
</div>

JavaScript

function someJScode() {
    alert('Click!');
}

function childCallback(event) {
    event.stopImmediatePropagation();
    return false;
}

デモ

The code above uses stopImmediatePropagation You can also use stopPropagation

ここにはより一般的な解決策があります:

var preventChildrenPropagation = (function (parentClass) {
    var preventPropagation = function (event) {
        event.stopPropagation();
        return false;
    }
    return function (parent) {
        var foreach = Array.prototype.forEach;
        foreach.call(document.getElementsByClassName(parent), function (e) {
            foreach.call(e.children, function (c) {
                c.onclick = preventPropagation;
            });
        });
    }
}());

preventChildrenPropagation('parent');

preventChildrenPropagation メソッドは、 "parent"要素のすべての子要素の click イベントの伝播を防ぎます。

2
追加された
単に stopPropagation だけではないのですか?
追加された 著者 Felix Kling,
追加された 著者 Minko Gechev,
jQueryからの習慣... :-)
追加された 著者 Minko Gechev,
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript