10 Stimmen

Javascript-Klick auf untergeordnetes Element verhindern

Okay, eine einfache Frage:

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

Ohne Replizieren der manualToggle auf die 2 Spans, die erlaubt sind, klicken, wie kann ich verhindern, dass die "Nicht erlaubt zu klicken" span von Auslösen es übergeordnete div onclick-Ereignis, wenn es angeklickt wird?

21voto

rahul Punkte 179143

Geben Sie der Spanne eine ID und fügen Sie ihr ein onclick-Ereignis hinzu und verwenden Sie

Ein jQuery-Beispiel

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

event.stopPropagation() : Stoppt die Weitergabe eines Ereignisses an übergeordnete Elemente und verhindert, dass übergeordnete Handler über das Ereignis informiert werden.

0 Stimmen

Ich habe mich für etwas Ähnliches entschieden, aber nicht mit stopPropagation. (Ich habe in dieser Frage nichts abgelehnt...)

1 Stimmen

Es gibt einen Unterschied zwischen einer richtigen Antwort und einer Lösung, die funktioniert. Dies ist tatsächlich eine richtige Antwort auf diese Frage. Danke!

9voto

Daff Punkte 42755

Es wäre sinnvoll, eine Bibliothek zu verwenden, aber ohne können Sie dies versuchen (bearbeitet mit einer ganzen Seite zu testen):

<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>

0 Stimmen

event ? e ? da scheint etwas zu fehlen

0 Stimmen

Thx, e funktioniert nicht, ich testete es nur in einem cancelBubble Browser, ich änderte es auf Ereignis (die window.event ist) und setzen einige Test-Code in dort. Es funktioniert zumindest in FF 3.5 und IE7

2voto

Sie benötigen einen Event-Handler (es ist sehr einfach, dies in etwas wie jQuery zu tun), der Klicks für die Spans innerhalb des Divs abfängt und die Funktion nur auslöst, wenn der Span beispielsweise eine bestimmte Klasse hat/hat.

2voto

tlt Punkte 189

Ich hatte gerade das gleiche Problem und konnte jQuery nicht zum Laufen bringen, also habe ich einfaches Javascript verwendet:

document.getElementById("your_span").addEventListener("click", (event) => {
    event.stopPropagation();
});

Das hat bei mir gewirkt. Offensichtlich müssen Sie die addEventListener auf jedes Element, auf das Sie dies anwenden wollen. Da ich eine Menge von DOM-Manipulation war dies nicht ein Problem für mich. Hoffentlich hilft dies jemandem :)

1voto

knittl Punkte 214432

Mit mootools können Sie die Methode stopPropagation :

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

siehe http://mootools.net/docs/core/Native/Event#Event:stopPropagation

siehe auch diese sehr ähnliche Frage: Wie kann ich ein onclick-Ereignis für das übergeordnete Element auslösen, wenn Kind angeklickt wird stoppen?

2 Stimmen

Downvote prolly für die js-Bibliothek, die Sie vorschlagen, genau wie phoenix, die jQuery vorschlagen

0 Stimmen

Die Verwendung von Bibliotheken ist der einfachste (und browser-kompatibelste) Weg

0 Stimmen

Ich habe die akzeptierte Antwort verwendet, um ein paar Bits zu tauschen und jQuery zu verwenden, um zu erreichen, was ich brauchte. Trotzdem vielen Dank für Ihre Antwort. (Ich habe nichts in dieser Frage heruntergestimmt...)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X