我在JavaScript滑块中有一个表单。 如果我使用Tab键将焦点放在已有内容的表单字段上,则浏览器会意外滚动滑块。我只在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>
我已经能够将条件缩小到以下条件:
问题看起来类似于此处报道的问题:https://github.com/zurb/foundation/issues/6066,但条件并不完全相同(垂直滚动而不是水平;不使用overflow:hidden)。所以,也许这个问题也会发生在除我之外的其他条件下。
答案 0 :(得分:0)
我找到了一个快速修复此问题,有时候有点笨拙,但是当您将注意力集中到滑块中的输入时会涉及添加事件处理程序。
这是我的代码
$('.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/