Mám funkci kliknutí vázanou na mnoho prvků. Je možné, že někdy tyto prvky mohou sedět jeden v druhém. Událost click je tedy vázána na potomka a také na svého rodiče. Metoda je specifická pro prvek, na který jste klikli. Přirozeně, kvůli bublání událostí, se nejprve spustí událost dítěte a poté rodiče. Nemohu zavolat oběma najednou, protože událost rodiče přepíše událost dítěte. Takže bych mohl použít event.stopPropagation()
takže událost obdrží pouze první kliknutý prvek. Problém je v tom, že k prvku jsou také připojeny další události kliknutí, například na tyto prvky používám přetahovací prvek jQuery. Pokud zastavím šíření události kliknutí, přetažení nebude fungovat a následující události kliknutí nebudou volány.
Moje otázka tedy zní:Existuje způsob, jak zastavit bublání událostí metody, kterou událost zavolá, a ne celé události?
Skvělý Johne, ale tady je problém:
<div id="Elm1"><!-- relative --> <div class="Elmchildren"></div><!-- absolute--> <div class="Elmchildren"></div><!-- absolute--> <div class="Elmchildren"></div><!-- absolute--> <div id="Elm2"><!-- relative --> <div class="Elmchildren"></div><!-- absolute--> <div class="Elmchildren"></div><!-- absolute--> <div class="Elmchildren"></div><!-- absolute--> </div> </div>
Událost kliknutí je vázána na #Elm1
a #Elm2
. .Elmchildren
jsou šířka a výška 100%. Takže jsou to vlastně aktuální cíle.
Odpověď
zkuste něco takového
$(mySelector).click(function(evt) { if (evt.target == evt.currentTarget) { ///run your code. The if statment will only run this click event on the target element ///all other click events will still run. } });