触摸事件不适用于iPad Safari中的文本输入元素吗?

时间:2010-07-22 00:49:54

标签: ipad element touch textinput

在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 的文档。

3 个答案:

答案 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()并在必要时重新启用事件。