5

在 iPad Safari 中,我编写了 DIV 的触摸事件,因此当您触摸 DIV 内部并将手指放在该处 500 毫秒时,DIV 的背景颜色会发生变化。

当我尝试将代码移动到文本输入元素(在字段集中),使其成为触摸目标而不是 DIV 时,代码不起作用。尽管有这个 CSS,文本输入仍然被选中:

    input[type=text] {-webkit-touch-callout:none; -webkit-user-select:none }

有没有办法拦截 iPad Safari 中文本输入元素的触摸事件并以自定义方式处理它们,防止默认行为?还是我必须做一些额外的事情来获得支持这一点的输入?我尝试过使用和不使用虚拟点击处理程序:onclick="void(0)"。

这是我正在关注文档处理事件的文档。

4

3 回答 3

1

尝试禁用并使您的输入只读:

<input type="text" readonly />
于 2011-03-21T10:54:24.620 回答
1

如果您发布代码会很有帮助,但我认为您可能只需要阻止触摸事件的默认行为。如果使用 jQuery,这看起来像这样:

$("#ID")
        .bind("touchstart",
            function (e) {
                e.preventDefault();
                //do something
            })
        .bind("touchmove",
            function (e) {
                if (e.preventDefault) { 
                    e.preventDefault();
                }
                //do something
            });
于 2011-03-20T20:02:05.857 回答
1

如果您不调用preventDefault()您的处理程序代码,浏览器将自动将触摸事件传递给默认实现(在您认为您已经处理它之后)。默认实现是选择字段。

因此,在您的情况下,在您的处理程序中调用preventDefault()andstopPropagation()并返回 false。这可以防止事件进一步冒泡。然后你可以完全控制你的输入元素。

警告:您还将失去输入字段的默认行为!换句话说,您将无法在该字段中输入文本!或者如果输入字段是 a <select>,您将无法拉出列表等。

我想你真正想要的是:1)如果用户按住 500 毫秒,然后变成黄色,2)和/或释放时激活输入字段。在这种情况下,当您真的想使用输入字段时,您必须手动向上重新触发事件。

这种情况在 iPad 编程时很常见。例如,在许多情况下,您希望检测触摸拖动动作(即使在输入字段上)并将其解释为移动,但将触摸释放动作(不移动)解释为单击以激活输入字段. 您必须按照我上面的建议进行操作:preventDefault()并在必要时重新触发事件。

于 2011-03-22T06:28:50.610 回答