2017-04-03 3 views
0

Ich habe ein Problem mit jquery stop propagation. einen Wagen modal schließen, wenn ich auf der Seite klicken, außer auf den Wagen modal, ich tun musste:Ereignisstopp Ausbreitungsproblem mit Kindern Ereignis

 $('html').click(function() { 
      $('.cart-block').css('display','none'); 
     }); 

     $('.mycart, .cart-block').click(function(event){ 
      event.stopPropagation(); 

     }); 

Aber ich habe ein Problem, ich habe einen AJAX-Aufruf einen Artikel in meinem Warenkorb div löschen (Cart-Block), aber die Stop-Propagation stoppt das Ereignis.

$(document).on('click', '.deleteItem', function() { 
    //ajax call 
}); 

Kann mir jemand helfen? Dank viel (sorry für mein Englisch)

EDIT: HTML-Struktur // Button Warenkorb

<div class="center cart mycart" > 
      //icon and cart item counter 
      </div> 

     <div id="cartcaption" class="cart-block"> 
    //modal : content of the cart 
<div class="productsPanier"> 
<span id="{{$cart->rowId}}" class="deleteItem">delete</span> 
    </div> 
</div> 
+1

Könnten Sie bitte die Struktur Ihres HTML zeigen? – 4castle

+0

Ja, ich habe den Beitrag aktualisiert, danke :) – Alexandre

Antwort

0

Statt dessen, was Sie tun (Bindung 2 Menschen mit einer Stoppausbreitung), nur binden ein Handler und prüfen, ob das Ziel der Veranstaltung hat Klasse .cart-Block

So etwas wie folgt aus:

$('html').click(function(event) { 
    if (!$(event.target).hasClass('cart-block')) 
     $('.cart-block').css('display','none'); 
}); 

und entfernen Sie den folgenden Teil

$('.mycart, .cart-block').click(function(event){ 
    event.stopPropagation(); 
}); 

Ihre Veranstaltungen werden nun korrekt propagieren und die ‚display: none;‘ nicht den Warenkorb Block hinzugefügt erhalten, wenn Sie im Warenkorb-Block-Element sind, klicken

EDIT: wenn die äußerste Klasse namens ‚mycart‘, könnte man alternativ es so versuchen:

$('html').click(function(event) { 
    if (!($(event.target).closest('.mycart').length)) 
     $('.cart-block').css('display','none'); 
}); 

Was Dies wird überprüft, ob das Zielelement Ihres Klicks ein Elternteil mit der Klasse 'Mycart' ist. Diese Lösung setzt voraus, dass, was auch immer Sie in den Warenkorb klicken, einen Container mit der Klasse "Mycart" hat. Offensichtlich kann ich, ohne Ihr DOM zu sehen, nicht sicher sein, dass dies Ihren spezifischen Fall lösen wird. Wenn es anders ist, als ich angenommen habe, sollte es Sie zumindest in die richtige Richtung weisen.

+0

Danke für Ihre Antwort, aber es funktioniert nicht, denn wenn Sie in den Warenkorb auf eine andere Klasse klicken, schließen Sie den Warenkorb. – Alexandre

+0

Siehe meine Bearbeitung. Dies funktioniert für alles, solange Sie immer auf ein Kind von 'Mycart' klicken (was bedeutet, dass der gesamte anklickbare Bereich tatsächlich ein Kind des 'Mycart'-Containers ist). Wenn du Teile des 'mycart' hast, die direkt angeklickt werden können (dh wenn du darauf klickst, das Ereignisziel ist 'mycart' und kein Kind von 'mycart', dann musst du 'oder' hinzufügen Handhabung in der if-Anweisung –

+0

Vielen Dank! Es funktioniert :) – Alexandre