Google chrome Google Chrome中的溢出隐藏和输入文本滚动
以下是我的代码片段: 如果我在输入文本字段上单击并拖动,我会得到带有overflow:hidden滚动的div,就像它使用overflow:auto一样。如果我在div上设置overflow:hidden,我希望像其他浏览器一样锁定滚动 奇怪的是,如果我在输入字段上设置padding:0px,Chrome上的问题就不会再出现了 这是谷歌浏览器的错误吗?有没有解决方法可以让它在不使用Javascript的情况下工作Google chrome Google Chrome中的溢出隐藏和输入文本滚动,google-chrome,input,overflow,drag,hidden,Google Chrome,Input,Overflow,Drag,Hidden,以下是我的代码片段: 如果我在输入文本字段上单击并拖动,我会得到带有overflow:hidden滚动的div,就像它使用overflow:auto一样。如果我在div上设置overflow:hidden,我希望像其他浏览器一样锁定滚动 奇怪的是,如果我在输入字段上设置padding:0px,Chrome上的问题就不会再出现了 这是谷歌浏览器的错误吗?有没有解决方法可以让它在不使用Javascript的情况下工作 编辑:这种行为也发生在Safari 5上。可能是网络工具包的问题。我也遇到了这个
编辑:这种行为也发生在Safari 5上。可能是网络工具包的问题。我也遇到了这个问题。到目前为止,我最擅长的就是使用
指针事件:none代码>。我能应用它的唯一方法是设置显示:无代码>。否则它被忽略了,所以有一个短暂的眨眼
我使用JQuery尝试了tiffon的解决方案,但无法让它处理多个字段,在我将指针事件设置为“无”后,mouseup不会启动
因此,将输入“指针事件”设置为“无”可以解决滚动到隐藏内容的问题,但它会阻止用户使用鼠标事件聚焦字段。
但我注意到,点击标签仍然可以聚焦字段
所以我做了这个变通方法,因为我所有的字段都嵌套在div中。基本上,单击字段不会将其聚焦,但仍会将事件气泡化到其父级:
$('label').click(function(e){
e.stopPropagation();
});
$('input[type="text"], textarea').parent().click(function(){
$(this).find('label').click();
});
$('input[type="text"], textarea').on({
mousedown:function(){
$(this).css('pointer-events', 'none');
}
});
问题是,除非您使用键盘箭头键,否则它不允许您选择字段内的文本。在“onscroll”事件中将scrollLeft和/或scrollTop设置为0,这将禁用滚动:
var div = $(".overflow-hidden");
div.scroll(function() { div.scrollTop(0).scrollLeft(0); });
以下是为我修复它的方法:
input:active { pointer-events:none; }
感谢您在这个类似的问题上指出这一点:
2013-11更新:
指针事件:无
修复了该问题,但有许多缺点。解决此问题的最佳方法实际上是确保没有溢出的内容,如“溢出:隐藏的<代码>容器的内容不大于所述容器。如果您希望通过JavaScript滚动内容,请将其宽度和高度设置为0,只要它是隐藏的,并仅在移入之前调整其大小(通过关键帧动画或定时转换轻松完成)
重要提示:我在Chrome中遇到了一个奇怪的情况,在我通过CSS调整大小时,Chrome中的自定义
字段不应该导致任何溢出问题-开发工具确认了这一点,但是:在查看了阴影DOM之后,我意识到Chrome自己的“按钮”“溢出了实际输入字段,因此导致整个容器变大
如何显示阴影DOM:如果情况看起来不错,但仍然是一个问题,请转到Chrome开发工具,单击右下角的设置按钮。在“元素”部分的“常规”选项卡上,是启用“显示阴影DOM”的选项。这将使您了解整个情况…虽然大多数时候它只是增加了另一层复杂性,但在这里它确实很有帮助!同样的问题,只是解决方法对我不起作用。:-(非常感谢。这正是我需要的;-)不幸的是,使用此解决方案,用户无法再通过鼠标突出显示来向下滚动。此外,在JS中侦听事件时,它还有其他含义。请参阅我的答案,以获得更健壮的解决方案。它有缺点-我告诉你!尽管你的示例有点离题,因为它没有包含放置
field@JohnKurlak我用我的最新结论更新了我的帖子;-)@JörnBerkefeld非常抱歉!我以为我是在发布另一个帖子。我的错误。
input:active { pointer-events:none; }