https://jsfiddle.net/5f19mz0y/21/
我正在寻找防止按下 Tab 键时焦点从输入框逃逸的方法。然后,我找到了几种使用 preventDefault()
来处理 onkeydown 事件的方法。所以,由于返回 false 与使用 preventDefault()
和 stopPropagtion()
有相同的效果,我认为 return false
可以用来代替做同样的事情,但经过测试发现它不能以这种方式工作。
<script>
function tab( event ) {
if ( event.keyCode === 9)
{
event.preventDefault(); //- focus doesn't change
}
}
</script>
<input onkeydown="tab(event);">
以上代码按预期工作;当按下 tab 键时,焦点不会改变。
<script>
function tab( event ) {
if ( event.keyCode === 9)
{
return false; //- focus changes
}
}
</script>
<input onkeydown="tab(event);">
对于上面的代码,当按下tab键时焦点发生变化
谁能解释一下这是为什么?
已添加
<script>
function tab( event ) {
if ( event.keyCode === 9)
{
event.preventDefault();
event.stopPropagation();//- focus not changes
}
}
</script>
<input onkeydown="tab(event);">
考虑到 return false
中的 stopPropagation()
影响了结果,就像上面一样,我也用 preventDefault()
进行了测试> 和 stopPropagation()
。但是,这也可以正常工作,就像单独使用 preventDefault()
一样;结果与 return false
的结果不同。所以,除了 preventDefault()
和 stopPropagation()
return false
似乎还有更多内容
最佳答案
从 Javascript 事件处理程序返回 false
等同于同时调用 e.preventDefault
和 e.stopPropagation
。
所以不同之处在于 preventDefault
只会阻止默认事件操作的发生,即链接点击时的页面重定向、表单提交等,并且 返回 false
也会停止事件流
关于javascript return false vs preventdefault 焦点改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51063997/