Czy każdy może mi powiedzieć różnica w korzystaniu z metod cancelBubble
i stopPropagation
stosowanych w javascript.Jaka jest różnica między cancelBubble a stopPropagation?
Odpowiedz
cancelBubble
jest tylko IE właściwość logiczna (nie sposób), który służy do tego samego celu co w sposób stopPropagation()
innych przeglądarki, które ma zapobiec zdarzenia z przejściem do następnej tarczy (znany jako „bąbelkujące”, gdy zdarzenie podróżuje od elementów wewnętrznych do zewnętrznych, co jest jedynym sposobem, w jaki wydarzenie odbywa się w IE < 9). IE 9 obsługuje teraz stopPropagation()
, więc cancelBubble
ostatecznie stanie się przestarzałe. W międzyczasie, po to funkcja cross-browser, aby zatrzymać rozmnożeniowego zdarzeń:
function stopPropagation(evt) {
if (typeof evt.stopPropagation == "function") {
evt.stopPropagation();
} else {
evt.cancelBubble = true;
}
}
W funkcji obsługi zdarzeń, można go używać w następujący sposób:
document.getElementById("foo").onclick = function(evt) {
evt = evt || window.event; // For IE
stopPropagation(evt);
};
Być może coś pomniejszego, ale jeśli chcesz nazwać funkcję "stopPropagation" jako funkcję, czy lepiej nie przetestować jej funkcji '==" w przeciwieństwie do '! =" Niezdefiniowanego "'? –
@ ingredient_15939: Problem polega na tym, że niektóre metody obiektów hosta w niektórych przeglądarkach (głównie starszych wersjach IE) nie zwracają '" function "' from 'typeof'. Jednak w przypadku obiektów zdarzeń masz rację, można bezpiecznie założyć, że 'stopPropagation', jeśli istnieje, zwróci" "funkcję" '. –
Dla kompatybilności z IE8 i starszy użycie .cancelBubble
jeśli .stopPropogation()
jest niezdefiniowane:
if(ev.stopPropagation)ev.stopPropagation();
else ev.cancelBubble=true; // where ev is an event object
przeczytać w MSDN: http://msdn.microsoft.com/en-us/library/ff975961%28v=vs.85%29.aspx
Kolejną różnicą, którą ktoś opisał jest to, że e.cancelBubble
zatrzymuje propagację zdarzeń dla dalszych elementów tylko w fazie propagacji (gdy zdarzenie osiągnie pierwszy element propagacji), podczas gdy .preventDefault()
zapobiega propagacji zarówno w fazie przechwytywania, jak i propagacji (natychmiast dla kolejnego elementu w propagacja).
var a = document.getElementById('a');
var b = document.getElementById('b');
var c = document.getElementById('c');
var d = document.getElementById('d');
a.addEventListener('click',cancel,true);
b.addEventListener('click',cancel,true);
c.addEventListener('click',cancel,false);
d.addEventListener('click',cancel,false);
function cancel(event){
var logElem = event.currentTarget.id;
console.log(logElem);
if(logElem==='a') event.cancelBubble = true;
}
var e = document.getElementById('e');
var f = document.getElementById('f');
var g = document.getElementById('g');
var h = document.getElementById('h');
e.addEventListener('click',stop,true);
f.addEventListener('click',stop,true);
g.addEventListener('click',stop,false);
h.addEventListener('click',stop,false);
function stop(event){
var logElem = event.currentTarget.id;
console.log(logElem);
if(logElem==='e') event.stopPropagation();
}
#a,#b,#c,#d,#e,#f,#g,#h{
box-sizing:border-box;
width:100%;
height:90%;
border:solid 1px #33aaff;
padding:10px;
padding-top:0px;
cursor:pointer;
}
#a,#e{
width:200px;
height:200px;
}
<h3>cancelBubble</h3>
<div id='a'>a capturing
<div id='b'>b capturing
<div id='c'>c bubbling
<div id='d'>d bubbling
</div>
</div>
</div>
</div>
<h3>stopPropagation</h3>
<div id='e'>e capturing
<div id='f'>f capturing
<div id='g'>g bubbling
<div id='h'>h bubbling
</div>
</div>
</div>
</div>
- 1. Jaka jest różnica między cat_id a term_id?
- 2. Jaka jest różnica między IEnumerable a tablicami?
- 3. Jaka jest różnica między == a === w Verilog?
- 4. Jaka jest różnica między UseCase a Workflow?
- 5. Jaka jest różnica między pakietem a intencją?
- 6. Jaka jest różnica między węzłem a wierzchołkiem?
- 7. Jaka jest różnica między Ember.computed.alias a Ember.binding?
- 8. Jaka jest różnica między alertem a window.alert?
- 9. Jaka jest różnica między @android a android:
- 10. Jaka jest różnica między krotką a kompresją?
- 11. Jaka jest różnica między proxy a reify?
- 12. Jaka jest różnica między @Inject a @PersistenceContext?
- 13. Jaka jest różnica między sqlite3 a pdo_sqlite
- 14. Jaka jest różnica między Const a Constant?
- 15. Jaka jest różnica między Socket.IO a Firebase?
- 16. Jaka jest różnica między macierzą a tablix?
- 17. Jaka jest różnica między KERN_INVALID_ADDRESS a KERN_PROTECTION_FAILURE?
- 18. Jaka jest różnica między Float.POSITIVE_INFINITY a Float.MAX_VALUE?
- 19. Jaka jest różnica między SGML a XML?
- 20. Jaka jest różnica między Cake a Leiningen?
- 21. Jaka jest różnica między JavaBean a POJO?
- 22. Jaka jest różnica między kopiowaniem a klonowaniem?
- 23. Jaka jest różnica między HAVING a WHERE?
- 24. Jaka jest różnica między ItemTemplate a ItemPanelTemplate?
- 25. Jaka jest różnica między słownikiem a tablicą?
- 26. Jaka jest różnica między NSString a NSMutableString?
- 27. Jaka jest różnica między StudlyCaps a CamelCase?
- 28. Jaka jest różnica między IPV6_ADD_MEMBERSHIP a IPV6_JOIN_GROUP?
- 29. Jaka jest różnica między spark.sql.shuffle.partitions a spark.default.parallelism?
- 30. Jaka jest różnica między typescript.js a typescriptServices.js?
Są takie same, poza tym, że jest 'cancelBubble' IE-only retardedness i' stopPropagation' jest standardem. – Zirak