使用iScroll可防止键盘显示在我的设备上

时间:2011-09-30 21:57:12

标签: android iphone mobile-webkit iscroll4 webkit-transform

我正在使用iScroll提供iPhone样式滚动。但是,当点击文本框时,键盘不会显示。

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

这是iScroll中的错误吗?如果是,是否有经过测试的解决方案?或者iScroll还有其他选择吗?

提前致谢。

4 个答案:

答案 0 :(得分:4)

至少在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>

答案 1 :(得分:1)

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

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

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

希望这有助于其他人。

答案 2 :(得分:0)

我在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())。

答案 3 :(得分:0)

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

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