Angular/Ionic : 完成后更改输入焦点
Angular/Ionic : change input focus after completion
为了让用户登录我的应用程序,我通过短信向他们发送了一个代码(6 个数字)。
回到应用程序时,我会显示一个弹出窗口,以便他们输入上述代码。
我想要 6 个输入(最大长度 = 1)以获得更好的设计。这是我想要的视觉效果:
这是我的(到目前为止)HTML 弹出窗口模板:
<ion-content class="content-activation-code">
<div class="activation-code-list">
<input type="text" class="activation-input-code" maxlength="1" ng-model="code.c1" ng-focus="code.c1===''">
<input type="text" class="activation-input-code" maxlength="1" ng-model="code.c2">
<input type="text" class="activation-input-code" maxlength="1" ng-model="code.c3" >
<input type="text" class="activation-input-code" maxlength="1" ng-model="code.c4" >
<input type="text" class="activation-input-code" maxlength="1" ng-model="code.c5" >
<input type="text" class="activation-input-code" maxlength="1" ng-model="code.c6" >
</div>
CSS 对于此模板:
/*Popup code*/
.content-activation-code{
margin-top:55px;
}
.activation-code-list{
text-align:center;
}
.content-activation-code .activation-input-code{
width:20px;
border:1px solid grey;
margin:2px;
border-radius:10px;
text-align:center;
display:inline;
}
以及负责显示弹出窗口的控制器:
$scope.code = {c1:"",c2:"",c3:"",c4:"",c5:"",c6:""};
$ionicPopup.show({
templateUrl: "templates/activation_code.html",
title: 'Pour activer votre compte',
subTitle: 'Entrez le code envoyé au XXXX',
scope: $scope,
buttons: [
{ text: 'Annuler' },
{
text: 'Activer',
type: 'button-positive',
onTap: function(event) {
console.log($scope.code);
}
}
]
});
为了让用户不讨厌我并实际登录到应用程序,我想实现一种指令,如下所示:
- 弹出窗口打开时专注于第一个输入
- 每次完成前一个输入时专注于下一个输入
- 每次删除下一个输入并按下退格键时专注于上一个输入
提示:
我已经尝试将背景图像放入输入中以模拟此行为,但它没有正确显示在 phone.
上
我正在使用 Angular 1.5.3
您需要在每个输入上添加指令,以触发对下一个输入的关注
elem.on(keypress, function(e) {
e.target.nextElementSibling.focus().select();
})
Example JSFiddle
非常好!
我在 keypress 上使用了 keyup,以便在用户点击退格键时将焦点转移到前一个同级上。
为了能够个性化模板,我还使用了弹出窗口:
观点:
<ion-view class="activation-popup-bg">
<div class="activation-popup-code">
<div class="activation_titre popup_titre">Pour activer votre compte</div>
<div class="activation_soustitre popup_soustitre">Entrez le code envoyé au {{activationCtrl.portableFormate}}</div>
<div class="code-liste">
<input type="text" class="code-input" maxlength="1" ng-model="activationCtrl.c1" >
<input type="text" class="code-input" maxlength="1" ng-model="activationCtrl.c2" >
<input type="text" class="code-input" maxlength="1" ng-model="activationCtrl.c3" >
<input type="text" class="code-input" maxlength="1" ng-model="activationCtrl.c4" >
<input type="text" class="code-input" maxlength="1" ng-model="activationCtrl.c5" >
<input type="text" class="code-input" maxlength="1" ng-model="activationCtrl.c6" >
</div>
<button type="submit" class="button button-bac button-popup-code">VALIDER</button>
</div>
</ion-view>
CSS
/*Popup code*/
.activation-popup-bg{
width:100%;
height:100%;
background-color:rgba(0,0,0,0.5);
}
.activation-popup-code{
width:90%;
background-color:white;
margin:auto;
margin-top:50%;
text-align:center;
}
.activation-popup-code .popup_titre{
width:75%;
margin-right:auto;
margin-left:auto;
padding-top:5%;
color:#353535;
font-family:quicksandLight;
}
.activation-popup-code .popup_soustitre{
color:#353535;
font-family:quicksandMedium;
}
.activation-popup-code .code-liste{
text-align:center;
padding-top:5%
}
.activation-popup-code .code-liste .code-input{
display:inline;
height:50px;
width:30px;
border-radius:15px;
margin:2px;
border:1px solid grey;
font-family:quicksandRegular;
text-align:center;
font-size:30px;
}
.activation-popup-code .button-popup-code{
width:90%;
margin-bottom:10%;
margin-top:5%;
background-color:#707173;
font-family:quicksandBold;
color:white;
}
控制器
$scope.popover = $ionicPopover
.fromTemplateUrl("templates/activation_code.html", {scope: $scope})
.then(function(popover) {
$scope.popover = popover;
$scope.popover.show();
//Liaison des input entre eux
var tmpInputCode = document.querySelectorAll('.code-input');
for(var i in tmpInputCode) {
try{tmpInputCode[i].addEventListener('keyup', switchToNext);}catch(e){};
}
function switchToNext(e){
switch(e.keyCode){
case 8://Backspace
try{e.target.previousElementSibling.focus();}catch(e){};
break;
default://Autre touche
try{e.target.nextElementSibling.focus();}catch(e){};
break;
}
}
});
非常感谢您的帮助!
为了让用户登录我的应用程序,我通过短信向他们发送了一个代码(6 个数字)。 回到应用程序时,我会显示一个弹出窗口,以便他们输入上述代码。 我想要 6 个输入(最大长度 = 1)以获得更好的设计。这是我想要的视觉效果:
<ion-content class="content-activation-code">
<div class="activation-code-list">
<input type="text" class="activation-input-code" maxlength="1" ng-model="code.c1" ng-focus="code.c1===''">
<input type="text" class="activation-input-code" maxlength="1" ng-model="code.c2">
<input type="text" class="activation-input-code" maxlength="1" ng-model="code.c3" >
<input type="text" class="activation-input-code" maxlength="1" ng-model="code.c4" >
<input type="text" class="activation-input-code" maxlength="1" ng-model="code.c5" >
<input type="text" class="activation-input-code" maxlength="1" ng-model="code.c6" >
</div>
CSS 对于此模板:
/*Popup code*/
.content-activation-code{
margin-top:55px;
}
.activation-code-list{
text-align:center;
}
.content-activation-code .activation-input-code{
width:20px;
border:1px solid grey;
margin:2px;
border-radius:10px;
text-align:center;
display:inline;
}
以及负责显示弹出窗口的控制器:
$scope.code = {c1:"",c2:"",c3:"",c4:"",c5:"",c6:""};
$ionicPopup.show({
templateUrl: "templates/activation_code.html",
title: 'Pour activer votre compte',
subTitle: 'Entrez le code envoyé au XXXX',
scope: $scope,
buttons: [
{ text: 'Annuler' },
{
text: 'Activer',
type: 'button-positive',
onTap: function(event) {
console.log($scope.code);
}
}
]
});
为了让用户不讨厌我并实际登录到应用程序,我想实现一种指令,如下所示: - 弹出窗口打开时专注于第一个输入 - 每次完成前一个输入时专注于下一个输入 - 每次删除下一个输入并按下退格键时专注于上一个输入
提示: 我已经尝试将背景图像放入输入中以模拟此行为,但它没有正确显示在 phone.
上我正在使用 Angular 1.5.3
您需要在每个输入上添加指令,以触发对下一个输入的关注
elem.on(keypress, function(e) {
e.target.nextElementSibling.focus().select();
})
Example JSFiddle
非常好!
我在 keypress 上使用了 keyup,以便在用户点击退格键时将焦点转移到前一个同级上。
为了能够个性化模板,我还使用了弹出窗口:
观点:
<ion-view class="activation-popup-bg">
<div class="activation-popup-code">
<div class="activation_titre popup_titre">Pour activer votre compte</div>
<div class="activation_soustitre popup_soustitre">Entrez le code envoyé au {{activationCtrl.portableFormate}}</div>
<div class="code-liste">
<input type="text" class="code-input" maxlength="1" ng-model="activationCtrl.c1" >
<input type="text" class="code-input" maxlength="1" ng-model="activationCtrl.c2" >
<input type="text" class="code-input" maxlength="1" ng-model="activationCtrl.c3" >
<input type="text" class="code-input" maxlength="1" ng-model="activationCtrl.c4" >
<input type="text" class="code-input" maxlength="1" ng-model="activationCtrl.c5" >
<input type="text" class="code-input" maxlength="1" ng-model="activationCtrl.c6" >
</div>
<button type="submit" class="button button-bac button-popup-code">VALIDER</button>
</div>
</ion-view>
CSS
/*Popup code*/
.activation-popup-bg{
width:100%;
height:100%;
background-color:rgba(0,0,0,0.5);
}
.activation-popup-code{
width:90%;
background-color:white;
margin:auto;
margin-top:50%;
text-align:center;
}
.activation-popup-code .popup_titre{
width:75%;
margin-right:auto;
margin-left:auto;
padding-top:5%;
color:#353535;
font-family:quicksandLight;
}
.activation-popup-code .popup_soustitre{
color:#353535;
font-family:quicksandMedium;
}
.activation-popup-code .code-liste{
text-align:center;
padding-top:5%
}
.activation-popup-code .code-liste .code-input{
display:inline;
height:50px;
width:30px;
border-radius:15px;
margin:2px;
border:1px solid grey;
font-family:quicksandRegular;
text-align:center;
font-size:30px;
}
.activation-popup-code .button-popup-code{
width:90%;
margin-bottom:10%;
margin-top:5%;
background-color:#707173;
font-family:quicksandBold;
color:white;
}
控制器
$scope.popover = $ionicPopover
.fromTemplateUrl("templates/activation_code.html", {scope: $scope})
.then(function(popover) {
$scope.popover = popover;
$scope.popover.show();
//Liaison des input entre eux
var tmpInputCode = document.querySelectorAll('.code-input');
for(var i in tmpInputCode) {
try{tmpInputCode[i].addEventListener('keyup', switchToNext);}catch(e){};
}
function switchToNext(e){
switch(e.keyCode){
case 8://Backspace
try{e.target.previousElementSibling.focus();}catch(e){};
break;
default://Autre touche
try{e.target.nextElementSibling.focus();}catch(e){};
break;
}
}
});
非常感谢您的帮助!