我在一个带溢出的容器里面有一个表单:hidden,我正在更改它的className,其中每个类使其top-margin显示焦点()的正确聚焦字段。
所以jQuery只应用className。不涉及webkit以外的动画。
问题是在动画发生之前,表单MOVES在容器内部显示隐藏字段。检查器中未显示更改的值:top,top-margin,top-padding保持不变。
我在重点领域尝试preventDefaults();
,但没有成功。
这是一个显示案例的小提琴。
更新: 我想清楚一点,当“tabbing”到下一个字段时,它会去那里,但是css动画发生在它上面,并且表单要么不跳动动画,要么只是动画ALONG与已经发生的滚动/显示预期的字段最终位于容器外部。
单击图例标记选项卡可按预期工作。我会尝试阻止keydown事件的默认值,而不是焦点事件,我会及时更新。
答案 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
从视口外部的输入中删除选项卡索引,并将其恢复为可见输入。