ist hier ein jsfiddle zeigt mit POJS dass return false;
nicht die Veranstaltungs-Ausbreitung nicht zu stoppen: http://jsfiddle.net/Ralt/Lz2Pw/Warum führt die Rückgabe falscher Stopps mit jQuery aus, während dies nicht mit POJS geschieht?
Hier eine weitere mit jQuery zeigt, dass return false;
tut die Ausbreitung des Ereignisses zu stoppen: http://jsfiddle.net/Ralt/D5Mtg/
Edit: Die Einer erklärt mir, warum jQuery das - abweichend vom ursprünglichen Verhalten absichtlich - (und wo im Code) die Antwort bekommt. Hier
ist der Code (lang, aber sehr leicht zu lesen):
HTML für beide Versionen:
<div id="parent1"> <div id="child1"><a href="#" id="a1">child1</a></div> </div> <div id="parent2"> <div id="child2"><a href="#" id="a2">child2</a></div> </div> <div id="parent3"> <div id="child3"><a href="#" id="a3">child3</a></div> </div>
POJS:
document.getElementById('child1').onclick = function(e) { console.log('child1'); e.preventDefault(); }; document.getElementById('parent1').onclick = function(e) { console.log('parent1'); }; document.getElementById('child2').onclick = function(e) { console.log('child2'); return false; }; document.getElementById('parent2').onclick = function(e) { console.log('parent2'); }; document.getElementById('child3').onclick = function(e) { console.log('child3'); e.stopPropagation(); }; document.getElementById('parent3').onclick = function(e) { console.log('parent3'); };
jQuery-Version :
$('#child1').click(function(e) { console.log('child1'); e.preventDefault(); }); $('#parent1').click(function(e) { console.log('parent1'); }); $('#child2').click(function(e) { console.log('child2'); return false; }); $('#parent2').click(function(e) { console.log('parent2'); }); $('#child3').click(function(e) { console.log('child3'); e.stopPropagation(); }); $('#parent3').click(function(e) { console.log('parent3'); });
Ich frage mich, ob die Rückkehr false wird von jQuery Ereignisbehandlung abgeholt und stoppt die Verbreitung dort ... –
Wenn das so ist, würde ich gerne sehen, wo :-) Auch, warum würde es so tun? –
Ah, das könnte es sein. Gehen Sie zur jQuery-Quelle (http://code.jquery.com/jquery-1.7.2.js), suchen Sie nach "event.stopPropagation", dies geschieht unmittelbar nach einer Bedingungsprüfung, ob ein zurückgegebener Wert false ist. –