9
votes

Comment puis-je empêcher un gestionnaire de clic qui est déclenché lorsqu'un élément enfant est cliqué?

J'ai deux tags de div, le premier div est le père et le deuxième div est fils à l'intérieur du père comme celui-ci xxx

et j'ai ajouté un événement (OnClick) à Div Père comme ceci xxx

ma question est la raison pour laquelle le fils hérite du Père en cas d'événement.

Je veux quand je clique sur le Père Div met en œuvre l'événement, mais lorsque je clique sur le fils ne met rien en œuvre car il n'a aucun événement.


0 commentaires

3 Réponses :


6
votes

Vous pouvez transmettre l'événement comme l'un des arguments de la fonction code> CLOSTHERFATHER CODE>, puis vérifiez si la cible de l'événement est l'élément Père. Voir Cet exemple xxx pré>

puis dans le HTML que vous avez juste besoin de Ajoutez l'argument de l'événement à la fonction JavaScript. P>

<div id="father" onclick="closeFather(event)">
<div id="son"></div>
</div>


6 commentaires

Ceci est en fait incorrect et ne fonctionne pas. Voir exemple


Étrange. Quel navigateur utilisez-vous? J'ai testé celui-ci rapidement et cela a bien fonctionné en chrome. Voir Cet exemple


@Connell Watkins - mais pas pratiquement


Qu'est-ce que vous voulez dire? Je suppose que vous avez plus de code que cela. Avez-vous d'autres divs à l'intérieur du Père que vous souhaitez réellement hériter de l'événement? Si vous voulez juste que l'événement ne se déclenche pas si le Fils est cliqué, vous pouvez utiliser si (e.target! = Document.getElementByID ('Son'))


@Connell Watkins - Ce code fonctionne avec les navigateurs modernes mais IE7, IE6 ne fonctionne pas


Je pense que c'est-à-dire que c'est utiliser E.Srelement plutôt que E.Target. Essayez si (((e.target || e.srelement) == Document.getElementByID ('Père')) à la place.



2
votes

Son événement Boubelle. Partie centrale des événements DOM. Vous pouvez renvoyer false et empêcher sa bulle dans votre gestionnaire ( fermefather , mais vous devez transmettre l'événement à celui-ci) Si un événement déclenché par Son .


0 commentaires

9
votes

Ceci est causé par un trait JavaScript appelé Boubillage d'événement . Par défaut, vos événements «bulles» dans le DOM.

Lorsque vous cliquez sur un nœud enfant, vous déclenchez automatiquement un événement de clic pour son (s) noeud parent. p>

Par défaut, lorsque vous cliquez sur un élément, Boubelle se produit de l'intérieur out: Ceci signifie que le début de l'événement Click () CODE> , alors c'est le parent, etc. p>

Vous pouvez résoudre le problème strong> en ajoutant un gestionnaire de clic secondaire à votre élément enfant et indiquez au navigateur d'arrêter de bouder dans un navigateur croisé manière compatible comme si ( Voir exemple en direct ): P>

<script language="javascript">
    function parentHandler(e) {
        alert('parent clicked');
    };

    function childHandler(e) {
        if (!e) var e = window.event;
        e.cancelBubble = true;
        if (e.stopPropagation) e.stopPropagation();    

        alert('child clicked');

    };    
</script>

<div id="parent" onclick="parentHandler(event);">
    Foo
    <div id="child" onclick="childHandler(event)">
        Bar
    </div>
</div>


2 commentaires

Le problème existe toujours dans votre exemple


Sachant que des événements, la bulle de l'intérieur est importante! Merci :)