html - 在 slider (Chrome) 中通过表单域切换时出现意外滚动

标签 html css google-chrome scroll onfocus

我在 JavaScript slider 中有一个表单。 如果我使用 Tab 键将焦点放在已有内容的表单字段上,浏览器会意外滚动 slider 。我只在 Chrome(版本 40.0.2214.91(64 位)) Ubuntu 14.04)。我想知道是否还有其他人遇到过这种情况,如果遇到过,您能否找到解决方法?

这是我用来重现问题并缩小贡献条件的代码片段(也在 http://jsfiddle.net/gkorban/jtuo5my0/6/ ):

.viewport {
  border: 2px solid blue;
  width: 400px;
  overflow: hidden;
}
.slider {
  border: 2px solid red;
  width: 600px;
}
.form-wrapper {
  width: 200px;
  border: 2px solid green;
}
input {
  width: 190px;
}
<div class="viewport">
  <div class="slider">
    <div class="form-wrapper">
      <form action="#">
        <input type="text" name="field1" />
        <input type="text" name="field2" value="field 2" />
      </form>
    </div>
  </div>
</div>
<p>Click on field 1, then press tab to give focus to field 2.</p>

我已经能够将条件缩小到以下范围:

  • 父 div 使用 overflow:hidden
  • 子div比父div宽
  • 使用 Tab 键改变字段焦点
  • 获得焦点的表单字段已经有值
  • 到目前为止,仅在 Chrome 中
  • 禁用/启用 Chrome 自动完成似乎没有任何影响

该问题似乎与此处报告的问题相似:https://github.com/zurb/foundation/issues/6066 ,但条件并不完全相同(垂直滚动而不是水平滚动;不使用溢出:隐藏)。所以,也许这个问题也会在我以外的其他条件下发生。

最佳答案

我找到了一个快速解决这个问题的方法,它有时有点笨拙,但涉及添加一个事件处理程序,以便在您关注 slider 中的输入时使用。

这是我的代码

$('.bx-viewport input').focusin(function() {
    setTimeout(function() {             // setTimeout makes sure that this runs after 
                                        // the original problem (it had a delay)
       $('.bx-viewport').scrollLeft(0); 
    }, 0);
}); 

因此您的解决方案应该是找出哪个元素应用了 scrollLeft 并将其设置为零。

这是工作的 jsfiddle:http://jsfiddle.net/jtuo5my0/7/

关于html - 在 slider (Chrome) 中通过表单域切换时出现意外滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28097008/

相关文章:

html - 在 CSS 中围绕多个单词创建一个圆圈

javascript - CSS 列表样式类型使用属性值

css - jqDock 的继承 DIV 的 div 位置让我发疯

html - 使用 line-height 属性在父元素的垂直中间对齐元素

javascript - Chrome WebRTC 在使用adapter.js 进行浏览器更新时中断

html - 将自定义设计添加到 ActiveAdmin - rails

css - 如何在 Google Chrome 扩展中真正隔离样式表?

javascript - 谷歌浏览器扩展用户脚本图标

google-chrome - 如何在 Chrome 中禁用相同的站点策略?

javascript - 按回车键使用 html/css/js 创建一个带标签的文本框(附截图)