9

わかりました、簡単な質問:

<div onclick="javascript:manualToggle(this)">
    <span>Allowed to click</span>
    <span>Not allowed to click</span>
    <span>Allowed to click</span>
</div>

クリックが許可されている 2 つのスパンに manualToggle を複製せずに、「クリックを許可されていません」スパンがクリックされたときに親 div onclick イベントを発生させないようにするにはどうすればよいですか?

4

7 に答える 7

19

スパンに ID を付けて onclick イベントをアタッチし、使用します

jQuery のサンプル

$("#spn2").click(function(event){
  event.stopPropagation();  
});

event.stopPropagation() : 親要素へのイベントのバブリングを停止し、親ハンドラーにイベントが通知されないようにします。

于 2009-09-16T09:12:01.860 に答える
9

ライブラリを使用することは理にかなっていますが、これを試すことはできません (ページ全体を編集してテストします):

<html><head></head>
<body>
<script type="text/javascript"><!--
function manualToggle(val)
{
    alert(val.id);
}

--></script>

<div id="test" onclick="manualToggle(this);">
    <span>Allowed to click</span>
    <span onclick="event.cancelBubble=true;if (event.stopPropagation) event.stopPropagation();">Not allowed to click</span>
    <span>Allowed to click</span>
</div>
</body>
</html>
于 2009-09-16T09:19:57.910 に答える
2

div内のスパンのクリックをキャッチし、たとえばスパンに特定のクラスがある/ない場合にのみ関数を起動するイベントハンドラー(jQueryのようなものでこれを行うのは非常に簡単です)が必要です。

于 2009-09-16T09:11:01.573 に答える
1

mootoolsを使用すると、次の方法を使用できますstopPropagation

$('myChild').addEvent('click', function(ev){
    ev.stopPropagation(); // this will prevent the event to bubble up, and fire the parent's click event.
});

http://mootools.net/docs/core/Native/Event#Event:stopPropagationを参照してください

この非常によく似た質問も参照してください。子がクリックされたときに親要素に対してonclickイベントが発生しないようにするにはどうすればよいですか?

于 2009-09-16T09:08:31.897 に答える
0

考えられる解決策:スパンのIDを指定し、クリックしたIDが関数でクリックできるかどうかを確認します

悪い考え:divから関数を呼び出すため、クリックされたスパンがわかりません...

于 2009-09-16T09:07:10.627 に答える