首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ipad KeyPad没有显示放置在jquery可拖放div中的文本框。

Ipad KeyPad没有显示放置在jquery可拖放div中的文本框。
EN

Stack Overflow用户
提问于 2012-12-18 09:16:10
回答 2查看 1.2K关注 0票数 1

我有一个具有jquery可拖式div的应用程序。我在可拖放的div中放置了四个文本字段,以便从用户获得输入。

Aspx:

代码语言:javascript
复制
    <div id="divAdd" runat="server">
    <input id="txtCode" placeholder="Location Code" maxlength="20" 
    type="text" runat="server" />
    <input id="txtName" placeholder="Location Code" maxlength="20" 
    type="text" runat="server" />
    ...
    </div>
    <div>

Javascript:

代码语言:javascript
复制
 $("#divAdd").draggable({ cursor: 'move', containment: '#divmap',
                drag: function () {
                    fnHandleMove();
                }
            });

我不能将光标放在IPAD中的文本框中,只需点击它。然而,桌面版本工作良好。

如果我注释掉javascript部分,我就能够放置光标和键盘显示.

这个带有jquery的bug是可拖动的,还是我做错了什么?

除了JqueryUI.js之外,我在应用程序中使用JqueryTouchPunch.js和JSPlumb.js。

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-14 11:57:35

好的,这里有一个解决方案,如果您的textfield --不管是什么HTML元素,不是聚焦、滚动、选择单词、在文本周围移动文本光标--以及任何可能出现的不同场景,那么您可以重写该textfield脚本。我假设您的元素不是可拖的元素,但可能是它的子元素,就像我的情况一样。

在html元素上放置一个类,例如class="useDefault"。然后转到脚本文件并找到该部分:

代码语言:javascript
复制
...
function simulateMouseEvent (event, simulatedType) {

    // Ignore multi-touch events
    if (event.originalEvent.touches.length > 1) {
      return;
    }

    event.preventDefault();

    var touch = event.originalEvent.changedTouches[0],
        simulatedEvent = document.createEvent('MouseEvents');
....

正如您可能看到的,jquery.ui.touch.punch.js确保event.preventDefault();覆盖浏览器的默认行为。为了防止我们的特定类节点出现这种情况,请做以下修改:

代码语言:javascript
复制
if (event.originalEvent.touches.length > 1) {
  return;
}
var touch = event.originalEvent.changedTouches[0],
  simulatedEvent = document.createEvent('MouseEvents');
//As you can see here is your class element check
if (touch.target.className === "useDefault") {
  event.stopPropagation();
} else {
  event.preventDefault();
}

此解决方案仅在webkit浏览器和jQuery UI Touch Pchpn0.2.2版本中进行测试。

希望快速解决办法有帮助,BR

票数 4
EN

Stack Overflow用户

发布于 2013-05-24 19:22:47

儿童思想的一种变异:

同样的方法,同样的部分:

代码语言:javascript
复制
function simulateMouseEvent (event, simulatedType) {
    // Ignore multi-touch events
    if (event.originalEvent.touches.length > 1) {
        return;
    }

    event.preventDefault();

代之以:

代码语言:javascript
复制
function simulateMouseEvent (event, simulatedType) {
    // Ignore multi-touch events
    if (event.originalEvent.touches.length > 1) return;

    if (simulatedType == 'mouseup') {
        var elem = $(event.originalEvent.changedTouches[0].target);
        if (elem.is("input") || elem.is("textarea")) elem.focus();
        else event.preventDefault();
    } else event.preventDefault();

希望能帮上忙。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13929680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档