我在网站上有一个基本表单,其中包含一些输入字段。
如果用户尝试滚动页面,并通过在输入框中放置手指开始滚动,则将不允许页面滚动。
如果他们在正文的某个位置开始滚动,则页面可以正常滚动。
这似乎与这位先生遇到的问题相同,但他说之前的开发人员故意实现了这一点,而我绝对没有这个问题。
有什么想法吗?
我在网站上有一个基本表单,其中包含一些输入字段。
如果用户尝试滚动页面,并通过在输入框中放置手指开始滚动,则将不允许页面滚动。
如果他们在正文的某个位置开始滚动,则页面可以正常滚动。
这似乎与这位先生遇到的问题相同,但他说之前的开发人员故意实现了这一点,而我绝对没有这个问题。
有什么想法吗?
html {
overflow: scroll;
-webkit-overflow-scrolling: touch;
}
适用于 input 元素和 iframe 元素。 触摸事件解决了滚动问题,但会禁用这些元素上的焦点事件。
html:
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="user-scalable=no, initial-scale=1, target-densitydpi=medium-dpi" />
<title>Broken Input Scrolling</title>
<link rel="stylesheet" href="jquery.mobile-1.4.5.min.css">
<script src="jquery.js"></script>
<script src="jquery.mobile-1.4.5.min.js"></script>
<link rel="stylesheet" href="index.css">
</head>
<body>
<div data-role="page" id="outerDiv">
<div data-role="header">
<h1>Broken Input Scrolling</h1>
</div>
<div data-role="content" id="contentDiv">
<div id="tableDiv">
<table>
<tbody>
<tr>
<td name="nameTitle" id="nameTitle" class="input-row3"><span>Scenario Name</span></td>
<td><input type="email" name="name1" id="name1" placeholder="Scenario 1"/></td>
<td><input type="email" name="name2" id="name2" placeholder="Scenario 2"/></td>
<td><input type="email" name="name3" id="name3" placeholder="Scenario 3"/></td>
<td><input type="email" name="name4" id="name4" placeholder="Scenario 4"/></td>
<td><input type="email" name="name5" id="name5" placeholder="Scenario 5"/></td>
<td><input type="email" name="name6" id="name6" placeholder="Scenario 6"/></td>
<td><input type="email" name="name7" id="name7" placeholder="Scenario 7"/></td>
<td><input type="email" name="name8" id="name8" placeholder="Scenario 8"/></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="index.js"></script>
<script type="text/javascript">
app.initialize();
</script>
</body>
</html>
css:
table {
width: 90em;
table-layout:fixed;
}
td {
height: 3em;
width: 10em;
border: 0.1em solid black;
}
#tableDiv {
overflow-x: auto !important;
}
#tableDiv > * {
-webkit-transform: translate3d(0,0,0);
}
#tableDiv > * {
-webkit-transform: translate3d(0,0,0);
}
function setTextareaPointerEvents(value) {
var nodes = document.getElementsByTagName('textarea');
for(var i = 0; i < nodes.length; i++) {
nodes[i].style.pointerEvents = value;
}
}
document.addEventListener('DOMContentLoaded', function() {
setTextareaPointerEvents('none');
});
document.addEventListener('touchstart', function() {
setTextareaPointerEvents('auto');
});
document.addEventListener('touchmove', function() {
e.preventDefault();
setTextareaPointerEvents('none');
});
document.addEventListener('touchend', function() {
setTimeout(function() {
setTextareaPointerEvents('none');
}, 0);
});
这将使移动版Safari(其他浏览器尚未测试)忽略文本区域的滚动,但允许像往常一样设置焦点等。
您可以尝试以下代码来防止在触摸移动时输入
$(document).on('touchmove','input',function(e){
e.preventDefault();
});