Android日期脚本 - Titanium Mobile App

时间:2014-10-18 16:42:29

标签: android titanium-mobile appcelerator

我的应用程序上有一个表单,我试图在文本字段强制使用特定格式(例如dob 11/33/1944)。以下代码在iPhone上运行良好但在Android上,一旦我输入第一个号码,应用就会停止工作。有人可以帮我修改代码,以便它适用于iPhone和Android。谢谢你的帮助。

我有一个名为global.js的文件,其中我有强制格式的代码。这就是我正在使用的:

Mask = 
{
    mask: function(_field, _function)
    {
        _field.value = _function(_field.value);
    },

    dob: function(v)
    {
        v = v.replace(/\D/g,"");
        v = v.replace(/^(\d\d)(\d)/g,"$1/$2");
        v = v.replace(/(\d{2})(\d)/,"$1/$2");
        return v.slice(0, 10);
    },

    phone: function(v)
    {
        v = v.replace(/\D/g,"");
        v = v.replace(/^(\d\d)(\d)/g,"($1) $2");
        v = v.replace(/(\d{4})(\d)/,"$1-$2");
        return v.slice(0, 14);
    }
};

在我的表单上,我在global.js的视图顶部添加了以下内容:

var styles = require('global').Styles;

然后我的字段如下:

// Create a TextField.
var aTextField_dob = Ti.UI.createTextField(
{
    top : "10%",
    width : '80%',
    height:'8%',
    color: styles.textfield.color,
    font : 
    {
        fontSize : font_text
    },
    hintText : 'Date of Birth (Ex.01/01/1999)',
    paddingLeft : styles.textfield.paddingLeft,
    backgroundImage : styles.textfielda.backgroundImage,
});

// Listen for return events.
aTextField_dob.addEventListener('change', function(e)
{
    Mask.mask(aTextField_dob, Mask.dob);
});

以下是我在Android设备上遇到的问题,它只是不断重复,应用程序必须被迫停止:

[WARN] :   IInputConnectionWrapper: getCursorCapsMode on inactive InputConnection

1 个答案:

答案 0 :(得分:1)

首先,我通过使用日期选择器控件完全避免了这个问题。无论如何,那将是一个更好的UI / UX。

您可能正在更改事件中创建无限递归。这可以通过使用模糊(失去焦点)事件或按键事件(如果它不能等到焦点丢失)来避免。

我不确定正则表达式引擎是否不同。尝试将正则表达式输出放入另一个控件或只记录它 - 将它与任何可能的更改事件无限循环分开来测试它。