반응형
cleave.js 시간입력 폼 코드는 아래와 같다.
var cleave = new Cleave('.input-element', {
time: true,
timePattern: ['h', 'm', 's']
});
위와 같이 작성할 경우, 최대로 입력할 수 있는 시간은 23:59:59이다.
cleave.js 소스는 아래와 같다.
getTimeFormatOptions: function () {
var owner = this;
if (String(owner.timeFormat) === '12') {
return {
maxHourFirstDigit: 1,
maxHours: 12,
maxMinutesFirstDigit: 5,
maxMinutes: 60
};
}
return {
maxHourFirstDigit: 2,
maxHours: 23,
maxMinutesFirstDigit: 5,
maxMinutes: 60
};
},
getValidatedTime: function (value) {
var owner = this, result = '';
value = value.replace(/[^\d]/g, '');
var timeFormatOptions = owner.getTimeFormatOptions();
owner.blocks.forEach(function (length, index) {
if (value.length > 0) {
var sub = value.slice(0, length),
sub0 = sub.slice(0, 1),
rest = value.slice(length);
switch (owner.timePattern[index]) {
case 'h':
if (parseInt(sub0, 10) > timeFormatOptions.maxHourFirstDigit) {
sub = '0' + sub0;
} else if (parseInt(sub, 10) > timeFormatOptions.maxHours) {
sub = timeFormatOptions.maxHours + '';
}
break;
case 'm':
case 's':
if (parseInt(sub0, 10) > timeFormatOptions.maxMinutesFirstDigit) {
sub = '0' + sub0;
} else if (parseInt(sub, 10) > timeFormatOptions.maxMinutes) {
sub = timeFormatOptions.maxMinutes + '';
}
break;
}
result += sub;
// update remaining string
value = rest;
}
});
return this.getFixedTimeString(result);
},
getTimeFormatOptions 함수에서 각각 단위마다 최대 값을 가지고 있다. 그리고 타이핑을 할 때마다 getValidatedTime 함수가 호출되면서 유효성을 체크한다. 따라서 이 곳을 적절하게 수정해주면 포맷을 변경할 수 있다.
아래는 최대 입력값을 '24:00:00'으로 변경한 소스이다.
getTimeFormatOptions: function () {
var owner = this;
if (String(owner.timeFormat) === '12') {
return {
maxHourFirstDigit: 1,
maxHours: 12,
maxMinutesFirstDigit: 5,
maxMinutes: 60
};
}
return {
maxHourFirstDigit: 2,
maxHours: 24,
maxMinutesFirstDigit: 5,
maxMinutes: 60
};
},
getValidatedTime: function (value) {
var owner = this, result = '';
value = value.replace(/[^\d]/g, '');
var timeFormatOptions = owner.getTimeFormatOptions();
owner.blocks.forEach(function (length, index) {
if (value.length > 0) {
var sub = value.slice(0, length),
sub0 = sub.slice(0, 1),
rest = value.slice(length);
switch (owner.timePattern[index]) {
case 'h':
if (parseInt(sub0, 10) > timeFormatOptions.maxHourFirstDigit) {
sub = '0' + sub0;
} else if (parseInt(sub, 10) > timeFormatOptions.maxHours) {
sub = timeFormatOptions.maxHours + '';
}
break;
case 'm':
case 's':
if (parseInt(sub0, 10) > timeFormatOptions.maxMinutesFirstDigit) {
sub = '0' + sub0;
} else if (parseInt(sub, 10) > timeFormatOptions.maxMinutes) {
sub = timeFormatOptions.maxMinutes + '';
}
break;
}
if(result.slice(0,2) == '24'){
if(sub.length == '1'){
sub = '0';
} else if(sub.length == '2'){
sub = '00';
}
}
result += sub;
// update remaining string
value = rest;
}
});
return this.getFixedTimeString(result);
},
반응형
'프론트' 카테고리의 다른 글
[w2ui] grid 정렬 모드 (sortMode) (0) | 2022.01.06 |
---|