keyPress事件未在Android手机中触发

时间:2014-03-18 08:30:16

标签: javascript android backbone.js marionette

我正在将backbone,marionette用于我的应用程序。我对desktop and mobile使用相同的代码但keypress使用的mobile无效。我为mobile创建了Jsfiddle测试

如果您在desktop事件未触发的情况下打开此链接,如果您在{{1}}中打开它就会触发。如何解决此问题。

任何人都可以帮助我。

感谢。

6 个答案:

答案 0 :(得分:8)

Chrome移动版暂时不支持正确的按键事件。这有一个长期存在的错误:

https://code.google.com/p/chromium/issues/detail?id=118639

我认为应该在第38版修复。

答案 1 :(得分:5)

我会在输入框上建议两个事件。

这适用于桌面网络浏览器。

1)onkeypress = return isNumberKey(event);

function isNumberKey(e)
{
    var evt = e || window.event;

    if(evt) 
    { 
        var charCode = evt.keyCode || evt.which; 
    }
    else 
    { 
        return true; 
    }

    if((charCode > 47 &&  charCode < 58) || charCode == 9 || charCode == 8 || charCode ==46 || charCode ==37 || charCode==39)
    { 
        return true; 
    }

    return false;
}

这适用于移动设备

2)onkeyup="numberMobile(event);"

function numberMobile(e){
    e.target.value = e.target.value.replace(/[^\d]/g,'');
    return false;
}

在输入框中应用这两个事件并且它将起作用。唯一的缺点是,它使它变慢。但是现在我们必须忍受它。

这个解决方案有一个问题。左侧导航无效。我会尽快更新更合适的解决方案。

答案 2 :(得分:1)

在browserstack上测试。似乎对我有用。 这是指向您的要点的链接:

http://www.browserstack.com/start#os=android&os_version=4.1&device=Samsung+Galaxy+S+III&zoom_to_fit=true&full_screen=true&url=http%3A%2F%2Fjsfiddle.net%2F33Snz%2F3%2Fembedded%2Fresult%2F&speed=1&start=true

您能否知道您测试的具体andriod设备和浏览器。

答案 3 :(得分:1)

最后我发现了一个问题,但它在opera中不起作用。而不是编写数字字段的代码。我只是在html文件中的输入字段中添加了一个属性type ='number'。现在只有数字小键盘即将到来那么它满足了我的要求。这是JsFiddle

html代码:

<input type='number'/>

答案 4 :(得分:1)

以我的经验,我想分享我的知识,

台式机浏览器

<input type="number">
  1. Safari-也允许使用Chars(可能取决于版本)
  2. 不支持maxlength。
  3. 光标位置无法检测。
  4. 检测到@keypress事件。

<input type="text">
  1. 按预期工作。

<input type="tel">
  1. 按预期工作。

Android移动浏览器(Chrome)

<input type="number">
  1. 打开数字键盘
  2. 检测到@keypress事件。
  3. 光标位置无法检测。

 <input type="text">
  1. @keypress事件甚至没有检测到。
  2. maxlength不能正常工作。

 <input type="tel">
  1. 检测到@keypress事件。
  2. 支持最大长度。
  3. 可以检测输入字段中的光标位置。

注意: 为了检测我使用的光标位置,

let caretPos = e.target.selectionStart

让我知道,有什么方法可以检测 input [type =“ number”] 中的光标位置。


建议

对于桌面浏览器,请使用 input [type =“ text”] 处理诸如按键事件之类的情况,并使用光标位置替换某些值。

对于Android浏览器,使用 input [type =“ tel”] 处理上述相同情况。

答案 5 :(得分:0)

似乎已不推荐使用SELECT TAX.NAME tax, SUM((ITEM.COST) * (ITEM.AMOUNT)) total FROM INVOICES inv INNER JOIN INVOICEITEMS item ON INV.ID = ITEM.INVOICE INNER JOIN TAXES tax ON ITEM.TAX_ID = TAX.ID WHERE INV.ID = 1 GROUP BY TAX.ID 事件(请参阅https://developer.mozilla.org/en-US/docs/Web/Events/keypress),最好现在使用keypress事件,然后再支持所有浏览器。