我正在为我的应用程序使用backbone,marionette。我对两个desktop and mobile使用了相同的代码,但keypress在mobile中不工作。我做了一个Jsfiddle用于测试。如果你在mobile中打开这个链接,事件不会触发,如果你在desktop中打开,它会触发。我该如何解决这个问题。谁能帮帮我。
backbone,marionette
desktop and mobile
keypress
mobile
desktop
jslywgbw1#
Chrome移动的目前还不能正确支持按键事件。这有一个长期存在的bug:https://code.google.com/p/chromium/issues/detail?id=118639我认为应该在v38中修复。错误报告被关闭为“不会修复”。
pgpifvop2#
我将建议输入框上的两个事件。
这将在桌面Web浏览器上运行。
1)onkeypress = return isNumberKey(event);
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);"个
onkeyup="numberMobile(event);"
function numberMobile(e){ e.target.value = e.target.value.replace(/[^\d]/g,''); return false; }
在输入框上应用两个事件,它就会工作。唯一的缺点是,它使它变慢。但现在我们不得不忍受它。有一个问题woth这个解决方案。左导航不工作。我会更新更适当的解决方案很快。
puruo6ea3#
keypress事件似乎已被弃用(请参阅https://developer.mozilla.org/en-US/docs/Web/Events/keypress),最好在所有浏览器都支持它之前使用keydown事件。
keydown
c9x0cxw04#
最后我发现了一个问题,但它在opera中不起作用。我没有写数字字段的代码。我只是在html文件中的输入字段中添加了一个属性type='number'。现在只有数字键盘了。所以它满足了我的要求。下面是JsFiddleHTML代码:
<input type='number'/>
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你能告诉我你在什么样的设备和浏览器上测试吗?
balp4ylt6#
以我的经验,我愿意分享我的知识,
桌面浏览器
<input type="number">
<input type="text">
1.工作正常。
<input type="tel">
Android移动的浏览器(Chrome)
1.打开数字键盘1.@检测到按键事件。1.无法检测光标位置。
1.@甚至未检测到按键事件。
1.@检测到按键事件1.支持的最大长度。1.可以检测输入字段中的光标位置。
**注:**用于检测光标位置,
let caretPos = e.target.selectionStart
请告诉我是否有任何方法可以在**input[type=“number”]**中检测光标位置。
建议
对于桌面浏览器,请使用**input[type=“text”]来处理类似按键事件的情况,并使用光标位置替换某些值。对于Android浏览器,请使用input[type=“tel”]**来处理上述相同的情况。
6条答案
按热度按时间jslywgbw1#
Chrome移动的目前还不能正确支持按键事件。这有一个长期存在的bug:
https://code.google.com/p/chromium/issues/detail?id=118639
我认为应该在v38中修复。错误报告被关闭为“不会修复”。
pgpifvop2#
我将建议输入框上的两个事件。
这将在桌面Web浏览器上运行。
1)
onkeypress = return isNumberKey(event);
这适用于移动的
2)
onkeyup="numberMobile(event);"
个在输入框上应用两个事件,它就会工作。唯一的缺点是,它使它变慢。但现在我们不得不忍受它。
有一个问题woth这个解决方案。左导航不工作。我会更新更适当的解决方案很快。
puruo6ea3#
keypress
事件似乎已被弃用(请参阅https://developer.mozilla.org/en-US/docs/Web/Events/keypress),最好在所有浏览器都支持它之前使用keydown
事件。c9x0cxw04#
最后我发现了一个问题,但它在opera中不起作用。我没有写数字字段的代码。我只是在html文件中的输入字段中添加了一个属性type='number'。现在只有数字键盘了。所以它满足了我的要求。下面是JsFiddle
HTML代码:
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
你能告诉我你在什么样的设备和浏览器上测试吗?
balp4ylt6#
以我的经验,我愿意分享我的知识,
桌面浏览器
1.不支持最大长度。
1.无法检测光标位置。
1.@检测到按键事件。
1.工作正常。
1.工作正常。
Android移动的浏览器(Chrome)
1.打开数字键盘
1.@检测到按键事件。
1.无法检测光标位置。
1.@甚至未检测到按键事件。
1.@检测到按键事件
1.支持的最大长度。
1.可以检测输入字段中的光标位置。
**注:**用于检测光标位置,
请告诉我是否有任何方法可以在**input[type=“number”]**中检测光标位置。
建议
对于桌面浏览器,请使用**input[type=“text”]来处理类似按键事件的情况,并使用光标位置替换某些值。
对于Android浏览器,请使用input[type=“tel”]**来处理上述相同的情况。