イベントリスナーを登録する実際のコードは表示されていません。
このフィドルをpreventDefaultと stopPropagation で再生します。
自明であることを願っています。必要に応じてフィドルをフォークします。
form2.input にイベント リスナーがなく、イベントが outerDiv にバブリングしていることに注意してください。
form1 は、関連するユーザー コントロールに従って停止と防止を行うものです。
出力領域は、何が起こっているかを明確にする必要があります。
HTML
<div id="outerDiv">
<div>
<input id="pd" value="1" type="checkbox">Prevent Default in form1 keydown</input>
</div>
<div>
<input id="sp" value="1" type="checkbox">Stop Propagation in form1 keydown</input>
</div>
<div>
<button id="clear">Clear Output</button>
</div>
<form id="form1" action="">
<div>
<label>input of form1
<input type="text" />
</label>
</div>
</form>
<form id="form2" action="">
<div>
<label>input of form2
<input type="text" />
</label>
</div>
</form> <pre id="output">
watch this spot
</pre>
</div>
JS
window.addEventListener('DOMContentLoaded', function (event) {
// console.log("DOMContentLoaded event handler ...");
var form1 = document.getElementById('form1');
var form2 = document.getElementById('form2');
var output = document.getElementById('output');
var div = document.getElementById('outerDiv');
var clear = document.getElementById('clear');
clear.addEventListener('click', function (event) {
output.textContent = ('\n' + clear.id + '\'s ' + event.type + ' event handler for ' + event.srcElement.localName + ' clears output');
}, false);
console.dir(output);
div.addEventListener('keydown', function (event) {
output.textContent += ('\n' + div.id + '\'s ' + event.type + ' event handler for ' + event.srcElement.localName + ' notices \'' + event.srcElement.value + '\'');
}, false);
form1.addEventListener('keydown', function (event) {
output.textContent += ('\n' + form1.id + '\'s ' + event.type + ' event handler for ' + event.srcElement.localName + ' notices \'' + event.srcElement.value + '\'');
// prevents default of generating an input event
if (document.getElementById('pd').checked) {
event.preventDefault();
output.textContent += ('\n\t' + form1.localName + '\'s ' + event.type + ' event handler does preventDefault');
}
// stops propagation up to div
if (document.getElementById('sp').checked) {
event.stopPropagation();
output.textContent += ('\n\t\t' + form1.localName + '\'s ' + event.type + ' event handler does stopPropagation');
}
}, false);
form1.addEventListener('input', function (event) {
output.textContent += ('\n' + form1.id + '\'s ' + event.type + ' event handler for ' + event.srcElement.localName + ' notices \'' + event.srcElement.value + '\'');
}, false);
}, false);