Appcelerator密码TextField失焦后原有值丢失问题求助
解决Appcelerator密码TextField焦点丢失后值丢失的问题
这个问题我之前在开发Appcelerator应用时也踩过坑!本质是设置了passwordMask: true的TextField在失去焦点后,原生桥接层的特殊处理会导致后续编辑时无法正确读取原有内容,下面给你两种实用的解决办法:
方法一:手动维护密码值(推荐)
通过监听输入框的change、focus事件,手动保存和恢复密码值,完全规避系统内部的异常处理:
var passwordTextField = Ti.UI.createTextField({ hintText : 'Password', hintTextColor : '#959697', width : '80%', left : '5%', height : 40, top:'10%', passwordMask : true, tintColor :'black', color : 'green', returnKeyType : Ti.UI.RETURNKEY_DONE, autocapitalization :Titanium.UI.TEXT_AUTOCAPITALIZATION_NONE, }); // 新增:专门用来保存真实密码的变量 var savedPassword = ''; // 实时监听输入变化,同步保存密码 passwordTextField.addEventListener('change', function(e) { savedPassword = e.value; }); // 获取焦点时,把保存的密码重新赋值给输入框 passwordTextField.addEventListener('focus', function(e) { if (savedPassword) { passwordTextField.value = savedPassword; } }); $.index.add(passwordTextField); $.index.open();
方法二:动态切换密码掩码状态
如果不想额外维护变量,也可以在输入框失去焦点时,通过短暂切换掩码状态来强制保留值(注意:部分平台可能会出现短暂的明文闪烁):
var passwordTextField = Ti.UI.createTextField({ // 原有属性保持不变 }); passwordTextField.addEventListener('blur', function(e) { const tempValue = e.value; // 先关闭掩码再重新开启,强制系统保留文本值 passwordTextField.passwordMask = false; passwordTextField.value = tempValue; passwordTextField.passwordMask = true; }); $.index.add(passwordTextField); $.index.open();
问题根源说明
Appcelerator在iOS和Android平台的原生桥接实现中,对带密码掩码的TextField做了特殊处理:当输入框失去焦点时,会对文本值进行加密或临时清空操作,导致重新获取焦点时无法正确读取原有内容,所以需要我们手动干预来维护真实的输入值。
内容的提问来源于stack exchange,提问作者U Anil
相关产品推荐
相关产品推荐

