如何阻止浏览器跳转到焦点区域?

时间:2013-12-14 04:52:50

标签: jquery focus overflow form-fields

我在一个带溢出的容器里面有一个表单:hidden,我正在更改它的className,其中每个类使其top-margin显示焦点()的正确聚焦字段。

所以jQuery只应用className。不涉及webkit以外的动画。

问题是在动画发生之前,表单MOVES在容器内部显示隐藏字段。检查器中未显示更改的值:top,top-margin,top-padding保持不变。

我在重点领域尝试preventDefaults();,但没有成功。

这是一个显示案例的小提琴。

http://jsfiddle.net/dNk9v/

更新: 我想清楚一点,当“tabbing”到下一个字段时,它会去那里,但是css动画发生在它上面,并且表单要么不跳动动画,要么只是动画ALONG与已经发生的滚动/显示预期的字段最终位于容器外部。

单击图例标记选项卡可按预期工作。我会尝试阻止keydown事件的默认值,而不是焦点事件,我会及时更新。

1 个答案:

答案 0 :(得分:1)

根据这篇文章,这似乎是一个相当复杂的问题:https://forum.jquery.com/topic/chrome-bug-or-how-do-i-prevent-a-form-field-to-scroll-the-container-when-focused

我通过手动管理输入的tabindex属性来管理类似的问题。这将删除不需要的伪滚动,但也会删除Tab键到视口外的输入的功能。如果您愿意接受它,那么您可以轻松地向点击处理程序添加一些代码以添加或删除tabindexes:

$(inputEl).attr('tabindex', -1);  // removes tabbing
$(inputEl).attr('tabindex', 1);   // restores tabbing

从视口外部的输入中删除选项卡索引,并将其恢复为可见输入。