问题是
keydown
事件
泡沫
从
input
:not(input)
,处理程序将不会在事件刚在
元素,但它
将
section
元素。你可以通过检查
this
event.target
将
总是
成为
jQuery(function($){
$(document).on("keydown", ":not(input)", function(event){
// This fires for *all* elements :-?
console.log("Event handler #2 on", this);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<section>
<p>Click and type here</p>
<input value="Click and type here">
</section>
如果您继续添加
:not
jQuery(function($){
$(document).on("keydown", ":not(input):not(section):not(body)", function(event){
// This fires for *all* elements :-?
console.log("Event handler #2 on", this);
});
});
<<第节>
<p>单击并在此处键入</p>
</第节>
我想你
能够
:not(input):not(section):not(body):not(html)
,但这有点愚蠢,很难管理。
您的第三个处理程序正确地排除了
输入
从发射事件开始,但是
只有
输入
(和类似的)火元素
事件-它不能从
<section>
例如如果有一个
部分
$(document).on("keydown", "section :not(input)", function(event) {
console.log("Event handler #3 on", event.target);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<section>
<p>Click and type here</p>
<input value="Click and type here">
<textarea></textarea>
</section>