2009-09-16 9 views
6

question Ok, simple:Prévenir javascript onclick sur l'élément enfant

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

Sans répliquer le manualToggle sur les 2 travées qui sont autorisés à cliquer sur, comment puis-je empêcher le « Non autorisé à cliquer sur » la durée de mise à feu c'est l'événement parent div onclick quand on clique dessus?

Répondre

2

Vous avez besoin d'un gestionnaire d'événements (il est très facile de le faire dans quelque chose comme jQuery) que les prises de clics pour les portées dans la div et ne se déclenche la fonction si, par exemple , l'envergure a/n'a pas une classe particulière.

0

Solution possible: donner à l'id de portée de son et vérifiez si l'identifiant cliquée est autorisé à être cliqué dans votre fonction

mauvaise idée: vous ne savez pas quelle durée est cliqué puisque vous appelez la fonction de votre div ...

1

avec mootools vous pouvez utiliser la méthode stopPropagation:

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

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

voir aussi cette question très similaire: How can I stop an onclick event from firing for parent element when child is clicked?

+1

yay, downvote une parfaitement valide (et de travail) réponse! – knittl

+1

downvote prolly pour la bibliothèque js que vous proposez, tout comme phoenix qui suggère jQuery – Natrium

+0

en utilisant les bibliothèques est le moyen le plus facile (et le plus compatible navigateur) – knittl

16

Donner la durée d'un identifiant d'attacher événement onclick à elle et en utilisant

Un échantillon jQuery

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

event.stopPropagation(): arrête le barbotage d'un événement à des éléments parents, ce qui empêche tous les gestionnaires parent d'être notifié de l'événement.

+2

Est-ce que le vote vers le bas pour une réponse jQuery – rahul

+0

Je suis allé pour quelque chose de similaire, mais pas avec stopPropagation. (Je n'ai pas voté quoi que ce soit dans cette question ...) – Paul

+1

Il y a une différence entre une bonne réponse et une solution qui a fonctionné. C'est en fait une réponse correcte à cette question. Merci! – jmilloy

6

Il serait logique d'utiliser une bibliothèque, mais sans que vous pouvez essayer (édité avec une page entière pour tester):

<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

'événement'? 'e'? il semble qu'il manque quelque chose – knittl

+0

Thx, e ne fonctionne pas Je l'ai seulement testé dans un navigateur cancelBubble, je l'ai changé en événement (qui est window.event) et mis du code de test dedans. Cela fonctionne au moins en FF 3.5 et IE7 – Daff

Questions connexes