我的应用程序上有一个表单,我试图在文本字段强制使用特定格式(例如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
答案 0 :(得分:1)
首先,我通过使用日期选择器控件完全避免了这个问题。无论如何,那将是一个更好的UI / UX。
您可能正在更改事件中创建无限递归。这可以通过使用模糊(失去焦点)事件或按键事件(如果它不能等到焦点丢失)来避免。
我不确定正则表达式引擎是否不同。尝试将正则表达式输出放入另一个控件或只记录它 - 将它与任何可能的更改事件无限循环分开来测试它。