在iPad Safari中,我编写了一个DIV的触摸事件,这样当你触摸DIV并在那里按住手指500毫秒时,DIV的背景颜色会发生变化。
当我尝试将代码移动到文本输入元素(在字段集内)时,使其成为触摸目标而不是DIV,代码不起作用。尽管有这个CSS,文本输入仍然被选中:
input[type=text] {-webkit-touch-callout:none; -webkit-user-select:none }
是否无法拦截iPad Safari中文本输入元素的触摸事件并以自定义方式处理它们,从而防止出现默认行为?或者还有什么额外的东西我必须做以获得输入来支持这个?我尝试过使用和不使用虚拟点击处理程序:onclick =“void(0)”。
这是我正在遵循文档 Handling Events 的文档。
答案 0 :(得分:1)
如果您发布了代码会很有帮助,但我想您可能只需要阻止触摸事件的默认行为。如果使用jQuery,这看起来像这样:
$("#ID")
.bind("touchstart",
function (e) {
e.preventDefault();
//do something
})
.bind("touchmove",
function (e) {
if (e.preventDefault) {
e.preventDefault();
}
//do something
});
答案 1 :(得分:1)
尝试禁用并使您的输入只读:
<input type="text" readonly />
答案 2 :(得分:1)
如果您未在处理程序代码中调用preventDefault()
,浏览器将自动将触摸事件传递到默认实现(在您认为已经处理完之后)。默认实现是选择字段。
因此,在您的情况下,请在处理程序中调用preventDefault()
和stopPropagation()
,并返回false。这可以防止事件进一步冒泡。然后你可以完全控制你的输入元素。
警告:您还将失去输入字段的默认行为!换句话说,您将无法在该字段中输入文本!或者,如果输入字段是<select>
,您将无法提取列表等。
我想你真正想要的是:1)如果用户按住500ms,然后变黄,2)和/或在释放时激活输入字段。在这种情况下,当您真正想要使用输入字段时,您必须手动重新启动事件。
这种情况在编程iPad时很常见。例如,在许多情况下,您需要检测触摸拖动动作(即使在输入字段上)并将其解释为移动,但将触摸释放动作(不移动)解释为单击以激活输入字段。您必须按照我的建议执行上述操作:preventDefault()
并在必要时重新启用事件。