【问题标题】:Android (phonegap) Click on an input triggers different keyboards, randomlyAndroid(phonegap)点击输入触发不同的键盘,随机
【发布时间】:2013-05-17 13:29:48
【问题描述】:

我正在为 android 开发一个 phonegap 应用程序。

如果你不熟悉phonegap,只要知道它是一个包含webview的应用,其余的都是html/js。

我有一个普通的输入,当我点击它时,我有一个被触发的普通键盘,右下角有一个“开始”按钮。

但有时,我的键盘右下角只有一个“Enter”键。这个键盘通常行为怪异,不想隐藏。

我不明白为什么我的输入会触发不同的键盘。我只想保留第一个。

【问题讨论】:

  • 可以贴两个键盘的截图吗?
  • 我不能说为什么第二个键盘被触发,似乎焦点放在了其他地方。你在使用任何滚动库吗?由于某种原因,它们往往会导致输入问题。除此之外,您能否分享与该输入相关的 html 和任何 javascript?
  • @gameower 是的,你说的很对。我正在使用 iScroll。我知道这很麻烦,我很确定它来自它。然而,我真的找不到任何人遇到与我有关的问题......如果你知道任何修复/好的建议,我很高兴听到它:)

标签: java javascript android html cordova


【解决方案1】:

所以 iScroll + Android + Form 字段似乎不能很好地协同工作。我遇到了一些令人讨厌的问题,文本框消失,无法正常工作,键盘将整个页面向上移动。奇怪的东西。

我们通过在每个文本框/选择/表单字段上设置touchstart 上的stopPropagation 来解决它,它解决了我们的问题。

var selectField = document.getElementById('textbox');   
    selectField.addEventListener('touchstart', function(e) {
        e.stopPropagation();
        //updateScrollPosition(this, true);
    }, false);

编辑

我能想到的另一个解决方法是覆盖 onBeforeScrollStart 以防止在选定元素中发生触摸时滚动(输入、选择和 textAreas 是这里的问题,但您可以定位任何东西):

iScroll.options.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();
     }};

}

编辑 2

所以以上都没有帮助。不久前我也遇到了同样的情况,所以我想出了一个(可怕的)黑客来解决这个问题。我不能分享这段代码(哦,许可证!)但我所做的步骤是:

  • 检查是不是android,版本是否低于3.0
  • 隐藏您的输入并替换为 div
  • 当你点击 div 时,运行一个原生位层,触发点击隐藏的 EditText
  • 添加一个 textChangeListener 并将所有内容复制到您的 div 和您的输入中。
  • 真的很生气,这是您找到的最佳解决方案,并反复敲击桌面上的键盘。

【讨论】:

  • 尝试实现它,但现在我什至无法点击输入。当我点击它时没有任何反应。
  • 你在哪里测试它?如果您在浏览器上运行它,它将无法正常工作,但它应该可以在您的手机上正常运行!你用的是哪个版本的安卓?
  • 我正在安卓手机上测试它。我知道浏览器上不存在触摸事件;)我在 android >=3 上没有输入问题。我在 2.3 上遇到问题
  • 我也通过覆盖 onBeforeScrollStart 获得了很好的结果。也许值得一试!
  • 是的,我也在这样做。 :(
猜你喜欢
  • 2017-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-07
  • 2011-04-17
  • 1970-01-01
  • 2017-03-14
相关资源
最近更新 更多