Yanıtlar:
stopPropagation
Herhangi engeller üst yürütülmesini işleyicileri stopImmediatePropagation
bir üst işleyicileri engeller ve aynı zamanda herhangi bir başka yürütülmesini işleyicileri
Jquery dokümanlarından kısa bir örnek :
$("p").click(function(event) {
event.stopImmediatePropagation();
});
$("p").click(function(event) {
// This function won't be executed
$(this).css("background-color", "#f00");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>example</p>
Olay bağlama sırasının burada önemli olduğunu unutmayın!
Bu yayılma durmalarının her ikisinin de nasıl çalıştığını gösteren küçük bir örnek.
Bağlı üç olay işleyicisi vardır. Herhangi bir yayılımı durdurmazsak, dört uyarı olmalıdır - üç çocuk div'de ve bir ana div üzerinde.
Etkinliğin yayılmasını durdurursak, 3 uyarı olur (tümü iç alt div'da). Etkinlik DOM hiyerarşisini yaymayacağından, üst div bunu görmez ve işleyicisi tetiklenmez.
Yayılmayı derhal durdurursak, sadece 1 uyarı olacaktır. İç alt div'a bağlı üç olay işleyici olmasına rağmen, sadece 1 yürütülür ve aynı öğenin içinde bile başka herhangi bir yayılma hemen öldürülür.
stopPropagation()
değişken de DOM hiyerarşisinde ilerlemeyi durduracaktır. Sadece yukarı değil. Lütfen yakalama aşamasıyla ilgili ayrıntılar için cevabımı kontrol edin .
Gönderen jQuery API :
Bu yöntem, bir öğedeki ek işleyicilerin yürütülmesini engellemenin yanı sıra, event.stopPropagation () öğesini dolaylı olarak çağırarak köpürmeyi de durdurur. Olayın ata öğelerine köpürmesini önlemek, ancak diğer olay işleyicilerinin aynı öğede yürütülmesine izin vermek için bunun yerine event.stopPropagation () öğesini kullanabiliriz.
Bu yöntemin çağrılıp çağrılmadığını (o olay nesnesinde) bilmek için event.isImmediatePropagationStopped () yöntemini kullanın.
Kısacası: herevent.stopPropagation()
öğenin çalışmasını event.stopImmediatePropagation()
engellerken aynı öğedeki diğer işleyicilerin yürütülmesine izin verir .
event.stopImmediatePropagation
kabarcıklanma durmuyor değil mi?
stopImmediatePropagation
, olayın yayılma dönemini durdurduğu, her ikisinin de köpürmeyi önlemesi gerektiğinde, ilk olarak en dıştaki öğeleri tetikleyecek olan yakalama modunu değiştirebileceğiniz hiçbir şeye değmez ve ancak o zaman çocuklara inin (köpürme varsayılan ve ters yönde çalışır)
event.stopPropagation
üst öğelerdeki işleyicilerin çalışmasını engelleyecektir.
Arama event.stopImmediatePropagation
, aynı öğedeki diğer işleyicilerin çalışmasını da önler.
Ben geç gelen biriyim, ama belki bunu belirli bir örnekle söyleyebilirim:
Söyle, eğer varsa <table>
, ile <tr>
ve sonra <td>
. Şimdi, <td>
öğe için 3 olay işleyicisi ayarladığınızı varsayalım , o event.stopPropagation()
zaman ayarladığınız ilk olay işleyicisinde yaparsanız <td>
, için tüm olay işleyicileri <td>
çalışmaya devam eder , ancak etkinlik yalnızca <tr>
veya öğesine yayılmaz ve <table>
( yukarı çıkıp kadar <body>
, <html>
, document
, ve window
).
Eğer kullanırsanız Ancak şimdi, event.stopImmediatePropagation()
ilk olay işleyicisi içinde, o zaman, diğer iki olay işleyicileri <td>
İRADE DEĞİL çalıştırmak ve kadar yayılmaz <tr>
, <table>
(ve yukarı gitmeyecek ve kadar <body>
, <html>
, document
, ve window
).
Sadece bunun için olmadığını unutmayın <td>
. Diğer elementler için aynı prensibi takip edecektir.
1) event.stopPropagation():
=> Yalnızca karşılık gelen ana işleyicinin yürütülmesini durdurmak için kullanılır.
2) event.stopImmediatePropagation():
=> İlgili ana işleyicisinin ve geçerli işleyici hariç kendisine eklenmiş işleyicinin veya işlevin yürütülmesini durdurmak için kullanılır. => Tüm DOM öğesinin geçerli öğesine bağlı tüm işleyiciyi de durdurur.
İşte örnek: Jsfiddle !
Teşekkürler, -Sahil
event.stopPropagation () , aynı öğedeki diğer işleyicilerin yürütülmesine izin verirken event.stopImmediatePropagation () her olayın çalışmasını engeller. Örneğin, aşağıdaki jQuery kod bloğuna bakın.
$("p").click(function(event)
{ event.stopImmediatePropagation();
});
$("p").click(function(event)
{ // This function won't be executed
$(this).css("color", "#fff7e3");
});
Eğer Event.stopPropagation önceki örnekte kullanılan, sonra css ateş edeceği değiştirir, ancak bu durumda p elemanı sonraki tıklama etkinlik Event.stopImmediatePropagation () , bir sonraki p tıklama etkinlik yangın olmaz.
Şaşırtıcı bir şekilde, diğer tüm cevaplar gerçeğin sadece yarısını söylüyor ya da aslında yanlış!
e.stopImmediatePropagation()
bu olay için başka bir işleyicinin çağrılmasını engeller, istisna yoke.stopPropagation()
benzer, ancak yine de tüm işleyiciler sesleniyor bu aşamada üzerine bu elemanın zaten denilen değilseHangi aşama?
Örneğin, bir tıklama etkinliği her zaman önce DOM'a (“yakalama aşaması” denir) sonuna kadar gider, son olarak etkinliğin kaynağına ulaşır (“hedef aşaması”) ve sonra tekrar kabarır (“kabarcık aşaması”). Ayrıca, addEventListener()
hem yakalama hem de kabarcık aşaması için bağımsız olarak birden fazla işleyici kaydedebilirsiniz. (Hedef aşaması, her iki türden de işleyiciyi ayırmadan çağırır.)
Ve bu diğer cevapların yanlış olduğu şey:
Demo ile bir keman ve mozilla.org olay aşaması açıklaması.
Burada stopPropagation vs stopImmediatePropagation için JSfiddle örneğimi ekliyorum. JSFIDDLE
let stopProp = document.getElementById('stopPropagation');
let stopImmediate = document.getElementById('stopImmediatebtn');
let defaultbtn = document.getElementById("defalut-btn");
stopProp.addEventListener("click", function(event){
event.stopPropagation();
console.log('stopPropagation..')
})
stopProp.addEventListener("click", function(event){
console.log('AnotherClick')
})
stopImmediate.addEventListener("click", function(event){
event.stopImmediatePropagation();
console.log('stopimmediate')
})
stopImmediate.addEventListener("click", function(event){
console.log('ImmediateStop Another event wont work')
})
defaultbtn.addEventListener("click", function(event){
alert("Default Clik");
})
defaultbtn.addEventListener("click", function(event){
console.log("Second event defined will also work same time...")
})
div{
margin: 10px;
}
<p>
The simple example for event.stopPropagation and stopImmediatePropagation?
Please open console to view the results and click both button.
</p>
<div >
<button id="stopPropagation">
stopPropagation-Button
</button>
</div>
<div id="grand-div">
<div class="new" id="parent-div">
<button id="stopImmediatebtn">
StopImmediate
</button>
</div>
</div>
<div>
<button id="defalut-btn">
Normat Button
</button>
</div>