使用 iScroll 会阻止键盘在我的设备上显示

发布于 2024-12-07 11:57:09 字数 195 浏览 3 评论 0原文

我正在使用 iScroll 来提供 iPhone 风格的滚动。但是,当单击文本框时,键盘不会显示。

在尝试查找可能的原因时,我发现删除 iScroll 脚本可以使其正常工作,但在这种情况下我错过了滚动功能。

这是 iScroll 中的错误吗?如果是,是否有经过测试的解决方法?或者 iScroll 有什么替代方案吗?

提前致谢。

I am using iScroll for providing iPhone style scrolling. But, when clicking on the textboxes, the keyboard does not show up.

While trying to find the possible cause, I found that removing the iScroll script, makes it work normal, but in that case I miss the scrolling functionality.

Is this a bug in iScroll. If yes, is there a tested work-around? Or is there any alternative for iScroll?

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

自控 2024-12-14 11:57:09

至少在 iScroll 4 中,您可以添加此代码以启用输入字段的单击。请参阅示例文件夹中有关表单字段的演示。

<script type="text/javascript">

var myScroll;
function loaded() {
    myScroll = new iScroll('wrapper', {
        useTransform: false,
        onBeforeScrollStart: function (e) {
            var target = e.target;
            while (target.nodeType != 1) target = target.parentNode;

            if (target.tagName != 'SELECT' && target.tagName != 'INPUT' && target.tagName != 'TEXTAREA')
                e.preventDefault();
        }
    });
}

document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false);
document.addEventListener('DOMContentLoaded', loaded, false);

</script>

At least in iScroll 4, you can add this code to enable clicking of input fields. See the demo on Form-fields in the examples folder.

<script type="text/javascript">

var myScroll;
function loaded() {
    myScroll = new iScroll('wrapper', {
        useTransform: false,
        onBeforeScrollStart: function (e) {
            var target = e.target;
            while (target.nodeType != 1) target = target.parentNode;

            if (target.tagName != 'SELECT' && target.tagName != 'INPUT' && target.tagName != 'TEXTAREA')
                e.preventDefault();
        }
    });
}

document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false);
document.addEventListener('DOMContentLoaded', loaded, false);

</script>
旧人九事 2024-12-14 11:57:09

我能够解决该错误。问题出在 CSS 上。

我想可能是 CSS 造成了这个问题。我得出这个结论的基础是,当我评论 wrapperscroller 的 CSS 时,键盘出现了......但是保留它们,键盘不起作用。我使用的是 bottom: 0px;,这似乎以某种方式阻止了键盘的显示。

删除 bottom: 0px; 解决了我的问题。

希望这对其他人有帮助。

I was able to solve the error. The problem was with the CSS.

I thought may be the CSS is somehow creating the problem. I concluded this on the basis that when I commented the CSS for wrapper and scroller, the keyboard showed up... but keeping them, the keyboard didn't work. I was using bottom: 0px;, which seemed to be somehow preventing the keyboard from showing.

Removing bottom: 0px; solved my problem.

Hope this helps others.

阿楠 2024-12-14 11:57:09

我在 iScroll 4.2 中的 _start 中添加了以下代码来解决这个问题:

  if (e && e.target && e.target.tagName) {
    var bFocusField = ('|INPUT|TEXTAREA|BUTTON|SELECT|'
                         .indexOf('|' + e.target.tagName + '|') >= 0);
    if (bFocusField || that.focusField) {
      if (bFocusField) {
        that.focusField = e.target;
      } else {
        that.focusField.blur();
        that.focusField = null;
      }
      e.defaultPrevented = false;
      e.returnValue = true;
      return true;
    }
  }

代码插入到函数的初始化部分下方(that.moved = false; ... that.dirY = 0;)。

在 iPad 1 (iOS 5.1) 和 iPad 3 (iOS 6) 上进行了测试。屏幕键盘似乎不会干扰 iScroll(我每 5 秒执行一次 iScroll.refresh() )。

I added the following code to _start in iScroll 4.2 to solve this problem:

  if (e && e.target && e.target.tagName) {
    var bFocusField = ('|INPUT|TEXTAREA|BUTTON|SELECT|'
                         .indexOf('|' + e.target.tagName + '|') >= 0);
    if (bFocusField || that.focusField) {
      if (bFocusField) {
        that.focusField = e.target;
      } else {
        that.focusField.blur();
        that.focusField = null;
      }
      e.defaultPrevented = false;
      e.returnValue = true;
      return true;
    }
  }

Code is inserted below the initialization part of the function (that.moved = false; ... that.dirY = 0;).

Tested it on iPad 1 (iOS 5.1) and iPad 3 (iOS 6). The onscreen keyboard does not seem to interfere with iScroll (I do an iScroll.refresh() every 5 seconds).

你怎么这么可爱啊 2024-12-14 11:57:09

我相信这个解决方案是最佳的
调整iscroll.js中的代码,(如下)

onBeforeScrollStart: function (e) { 
                //e.preventDefault();
                if (e.target.nodeName.toLowerCase() == "select" || e.target.tagName.toLowerCase() == 'input' || e.target.tagName.toLowerCase() == 'textarea'){             
                    return;
                    } 
            },

I believe this solution is optimal
Tweak the code in iscroll.js, ( as follows )

onBeforeScrollStart: function (e) { 
                //e.preventDefault();
                if (e.target.nodeName.toLowerCase() == "select" || e.target.tagName.toLowerCase() == 'input' || e.target.tagName.toLowerCase() == 'textarea'){             
                    return;
                    } 
            },
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文