2012-12-03 14 views
16

Si consideri il seguente frammento di codice:Prevenire Bambino di sparare evento click del genitore

<div class="div-outer"> 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
    <div class="div-inner" style="background:red"> 
     Curabitur hendrerit vehicula erat, ut gravida orci luctus vitae. 
    </div> 
</div> 

Ora supponiamo che il div esterno ha un live click ad esso associati. Come faccio ad assicurarmi che il live click non venga attivato quando I click in qualsiasi punto dello div interno?

Edit:

Ecco il JS come richiesto

$(".div-outer").live("click",function(){alert("hi")}); 

Questo non dovrebbe essere triggereed quando si clicca su ".inner-div"

+3

pubblicare il tuo codice di js.jquery pure. – ryadavilli

risposta

19

È necessario aggiungere un listener di eventi per l'interno bambino e annulla la propagazione dell'evento.

In parole povere JS qualcosa come

document.getElementById('inner').addEventListner('click',function (e){ 
    e.stopPropagation(); 
}); 

è sufficiente. Si noti che jQuery provides the same facility:

$(".inner-div").click(function(event){ 
    event.stopPropagation(); 
}); 

o

$(".inner-inner").on('click',function(event){ 
    event.stopPropagation(); 
}); 
1

si può fare questo da aggiungere un evento click sul div interno e utilizzare uno return false; o event.stopPropagation();

$(".div-inner").click(function(){ 

    return false; 
}) 

o

$(".div-inner").click(function(event){ 

    event.stopPropagation(); 
}) 

jsFiddle

1

Crea nuova click listener per l'div interno e chiamare il event.stopPropagation() in questo nuovo evento.

come

$('div-outer').on('click','div-inner',function(e){ 
    e.stopPropagation(); 
}); 
+0

Ciò che apprezzo particolarmente di questa soluzione è che mi ha aiutato a configurare l'evento inverso: quando voglio che l'evento del bambino si attivi, ma non quello del genitore. –

0

uso stopPropagation nei vostri js file di

$(".eventclick").click(function(e) { 
    e.stopPropagation(); 
}); 
Problemi correlati