Titanium Appcelerator - 在文本字段中输入出生日期

Titanium Appcelerator - Entering Date of birth in textfield

我正在尝试格式化我的文本字段,用户将在其中输入他的出生日期。

目前,当用户开始输入第三个字符时,我正在添加“/”。

但是我需要在用户键入第二个字符时添加“/”。

请在下面找到我的代码,

$.dobTextfield.addEventListener("change", function (event) {
    var dobValue = $.dobTextfield.value;

    dobValue = dobValue.replace(/\//g, '');
    var newVal = '';
    var sizes = [2, 2, 4];

    for (var i in sizes) {
        if (dobValue.length > sizes[i]) {
            newVal += dobValue.substr(0, sizes[i]) + '/';
            dobValue = dobValue.substr(sizes[i]);                   
        }
        else
            break;
    }           
    newVal += dobValue;
    $.dobTextfield.value = newVal;  
});

建议:使用日期选择器

我建议您用标签替换您的文本字段(如果这很重要,可能样式看起来像文本字段)。

然后我会向显示日期选择器的标签添加一个点击事件。 Date Picker Docs

您可以根据日期选择器的值更新标签的值。

现有代码的解决方案

var oldValue;

$.dobTextfield.addEventListener("change", function (event) {
    var dobValue = $.dobTextfield.value;

    // this checks to see if the user has removed a slash bu hitting backspace
    // without this the user would not be able to delete a back space
    if (oldValue == dobValue + "/") {
        return;
    }

    var newVal = '';
    var sizes = [2, 2, 4];

    if (dobValue.length == 2 || dobValue.length == 5) {
        dobValue += "/";
    }

    $.dobTextfield.value = dobValue;  
    oldValue = $.dobTextfield.value;
});

这将在用户键入第二个字符时输入斜线,并且还允许用户在需要编辑日期时使用退格键删除斜线。

其他注意事项

您当前的文本字段允许用户输入无效日期。例如,用户可以输入诸如 60/99/2018 之类的日期。使用日期选择器将不再需要进行此类验证。