scope的$apply使用,以及用在不同事件上输入验证的对比

101 阅读1分钟

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

效果:当连续输入汉字时不符合内容不会被删除,只有失去焦点才会自动删除

缺点:不能及时删除不符合内容