编辑: 我已经上传了一段视频到 youtube,在这里展示了这个错误:http ://www.youtube.com/watch?v=zkDYlgtX5Hk
我发现了一个非常奇怪的错误,我在运行 Android 4.03 ICS 的三星 Galaxy S2 上测试我的新 Web 应用程序。
发生的情况是,当您在默认 Web 浏览器中加载表单然后向下滚动页面时,即使表单元素本身已向上滚动,hitbox/可触摸区域似乎仍停留在页面首次加载时屏幕上的位置屏幕。
据我所知,我可以用我可用的少数测试设备,我认为这只会发生在三星 Galaxy S2 上,因为我已经在具有相同版本的 android 的 Android 模拟器中尝试过它并且无法复制问题。我知道这使它成为一个非常特定的用户群,但最后我检查了 Galaxy s2 是我的国家(澳大利亚)最受欢迎的 Android 手机,所以很高兴找到一个修复程序。
我在http://users.tpg.com.au/geoffica/test.html创建了一个非常简单的页面来演示这一点
您可以通过执行以下操作来复制问题:
- 在 Galaxy S2 上加载页面
- 滚动浏览器,使页面完全填满屏幕,地址栏就在屏幕顶部。
- 选择框所在的位置,将手指放在屏幕一侧作为选择列表所在位置的标记。
- 向下滚动页面任意距离,(同时仍将选择列表保留在屏幕上)然后触摸选择列表曾经所在的空白区域,并且选项应该出现在屏幕上。可能需要几次尝试才能得到它,但它会发生。
现在我知道您认为这很难复制并且可能很少会发生,但是在我为客户构建的表单上,由于元素的位置,hitbox 总是与表单的提交按钮重叠,使其很难点击提交按钮。如果命中框重叠,选择列表也会从其他选择列表中窃取触摸,从而在触摸时出现错误的选项。
我已经尝试了很多事情,但到目前为止我发现的唯一解决方法是使用 touchstart 事件来触发我的提交按钮而不是点击事件。这似乎发生在选择列表的点击事件之前并阻止它首先进入,但这远非理想,并且不会阻止选择列表窃取页面上其他元素的点击。
我还考虑过滚动我自己的 jquery 插件来将选择列表放在屏幕外,然后通过触摸链接或其他东西来触发它们的点击事件。如果它是移动设备,那么无论选择列表的位置如何,选项都会出现在屏幕上。然而,这将非常麻烦,我需要考虑这将对来自 pc 或 iPad 的用户产生的影响,例如,它会在下拉列表中显示选项。这对我来说听起来很成问题。甚至可能需要一些 Galaxy s2 特定的浏览器/设备嗅探。
除了不使用选择列表之外,是否有人对此有真正的解决方法?