【问题标题】:javascript return false vs preventdefault focus changejavascript return false vs preventdefault 焦点更改
【发布时间】:2018-06-27 13:25:37
【问题描述】:

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()alone; 一样。结果与return false 的结果不同。所以,除了preventDefault()stopPropagation() 之外,return false 中似乎还有更多内容

【问题讨论】:

    标签: javascript html event-handling focus


    【解决方案1】:

    来自 Javascript 事件处理程序的Returning false 等效于调用e.preventDefaulte.stopPropagation

    所以区别在于preventDefault只会阻止默认事件动作的发生,即链接点击时的页面重定向、表单提交等,而return false也会停止事件流

    More Detail See Here

    【讨论】:

    • OP 描述了返回 false 的限制较少(它使焦点飞走)然后简单 e.preventDefault 如果你说的是真的,这是没有意义的,因为返回 false 本身应该“ call" 防止默认
    猜你喜欢
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 2015-03-27
    相关资源
    最近更新 更多