Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
需求是这样子的:当在输入框输入不为数字或字母时,立即删除输入内容。
分析:只需监听事件监听输入框变化,然后根据正则表达式做出相应的删除即可。
需求来源:以下例子均取自项目(用angularjs加html5hybrid开发的APP)中NR模块A/C输入框,且只针对IOS系统,Android暂无发现有以下问题,从用户体验的角度如何选取最优的响应事件?
使用input事件
function acLimit(){
var acInfo = element.val();
var reg = /[^a-zA-Z0-9]/g;
acInfo = acInfo.replace(reg,'');
scope.mrInfo.acInfo = acInfo;
}
element.on('input', function() {
scope.$apply(function(){acLimit();})
});
效果:能够立即删除不符合内容
缺点:当使用拼音输入法时,输入拼音则输入框上会显示一串字母
使用keyup或keypress事件
element.on('keyup', function() {
scope.$apply(function(){acLimit();})
});
效果:当输入汉字时,再次输入则会自动删除汉字
缺点:当输入汉字并失去焦点时,如输入内容为“us我们”,此时model绑定为“us”,但是view上显示的仍然是“us我们”。
使用keyup和blur事件事件
element.on('keyup', function() {
scope.$apply(function(){acLimit();})
});
element.on('blur', function() {
scope.$apply(function(){
acLimit();
})
效果:当输入汉字时,再次输入则会删除或者失去焦点时自动删除
缺点:不能及时删除不符合内容
使用change事件
element.on('change', function() {
scope.$apply(function(){acLimit();})
});
效果:当连续输入汉字时不符合内容不会被删除,只有失去焦点才会自动删除
缺点:不能及时删除不符合内容