backbone.js 在Android移动的中未触发keyPress事件

1bqhqjot  于 2022-11-10  发布在  Android
关注(0)|答案(6)|浏览(157)

我正在为我的应用程序使用backbone,marionette。我对两个desktop and mobile使用了相同的代码,但keypressmobile中不工作。我做了一个Jsfiddle用于测试。
如果你在mobile中打开这个链接,事件不会触发,如果你在desktop中打开,它会触发。我该如何解决这个问题。
谁能帮帮我。

  • 谢谢-谢谢
jslywgbw

jslywgbw1#

Chrome移动的目前还不能正确支持按键事件。这有一个长期存在的bug:
https://code.google.com/p/chromium/issues/detail?id=118639
我认为应该在v38中修复。错误报告被关闭为“不会修复”。

pgpifvop

pgpifvop2#

我将建议输入框上的两个事件。

这将在桌面Web浏览器上运行。

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;
}

在输入框上应用两个事件,它就会工作。唯一的缺点是,它使它变慢。但现在我们不得不忍受它。
有一个问题woth这个解决方案。左导航不工作。我会更新更适当的解决方案很快。

puruo6ea

puruo6ea3#

keypress事件似乎已被弃用(请参阅https://developer.mozilla.org/en-US/docs/Web/Events/keypress),最好在所有浏览器都支持它之前使用keydown事件。

c9x0cxw0

c9x0cxw04#

最后我发现了一个问题,但它在opera中不起作用。我没有写数字字段的代码。我只是在html文件中的输入字段中添加了一个属性type='number'。现在只有数字键盘了。所以它满足了我的要求。下面是JsFiddle
HTML代码:

<input type='number'/>
prdp8dxp

prdp8dxp5#

在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
你能告诉我你在什么样的设备和浏览器上测试吗?

balp4ylt

balp4ylt6#

以我的经验,我愿意分享我的知识,

桌面浏览器

<input type="number">
  1. Safari -也允许字符(可能取决于版本)
    1.不支持最大长度。
    1.无法检测光标位置。
    1.@检测到按键事件。
<input type="text">

1.工作正常。

<input type="tel">

1.工作正常。

Android移动的浏览器(Chrome)

<input type="number">

1.打开数字键盘
1.@检测到按键事件。
1.无法检测光标位置。

<input type="text">

1.@甚至未检测到按键事件。

  1. maxlength工作不正常。
<input type="tel">

1.@检测到按键事件
1.支持的最大长度。
1.可以检测输入字段中的光标位置。

**注:**用于检测光标位置,

let caretPos = e.target.selectionStart

请告诉我是否有任何方法可以在**input[type=“number”]**中检测光标位置。

建议

对于桌面浏览器,请使用**input[type=“text”]来处理类似按键事件的情况,并使用光标位置替换某些值。
对于Android浏览器,请使用
input[type=“tel”]**来处理上述相同的情况。

相关问题