salesforce-lightning - Salesforce 闪电输入的 element.set 在夏季 18 发布后不再工作
问题描述
我正在使用下面的代码片段来检查有效的电话号码格式,然后尝试将格式化的值设置为当前输入元素。但是在夏季 18 发布之后,我无法使用新的格式化值设置输入。
测试应用
<aura:application extends="force:slds">
<lightning:input type="text" label="Num" aura:id="ele" onchange="
{!c.changeNum}" />
</aura:application>
控制器:
({
changeNum : function(component, event, helper) {
helper.changeNum(component, event);
}
})
帮手:
({
changeNum : function(component, event) {
var element = event.getSource();
var phonenumber = element.get("v.value");
if(phonenumber){
var updatedValue = phonenumber.replace(/-/g, "");
if(/^\d{10}$/.test(updatedValue)){
phonenumber = updatedValue.match(new RegExp('\\d{4}$|\\d{3}', 'g')).join("-");
}
else{
var x = phonenumber.replace(/[^0-9._-]/g, "").replace(/ +/, " ");
phonenumber = x;
if(!/^[0-9-]+$/.test(phonenumber.slice(-1))){
phonenumber = phonenumber.slice(0, -1);
}
}
}
console.log(phonenumber);
element.set('v.value', phonenumber);
}
})
element.set 无法更新格式化的值。闪电输入元素仍然能够接受字母。
解决方案
我们可以使用Promise来解决这个问题
({
handleInputChange : function(component, event) {
try {
var element = event.getSource();
var inputValue = element.get("v.value");
var formattedValue;
var chkPattern = new Promise(
function (resolve, reject) {
if (inputValue) {
formattedValue = inputValue.replace(/[^0-9-]/g, "").replace(/ +/, " ");
resolve(formattedValue); // fulfilled
} else {
var reason = new Error('kitten is not happy');
reject(reason); // reject
}
}
);
chkPattern.then(function (fulfilled) {
element.set('v.value', fulfilled);
}).catch(function (error) {
console.log(error.message);
});
} catch(e) {
this.consoleLog(e.stack, true)
}
}
})
推荐阅读
- postgresql - 为什么 psql 无法连接到服务器?
- javascript - Angular - 我的 ngIf 仅隐藏一次输入标签
- c# - 当文本框中的字段不正确时如何显示两个不同的消息框
- spring-cloud-stream - 带有 kinesis 的 Spring 云流:AmazonDynamoDBLockClient 在循环中抛出异常
- flutter - Flutter - 占据整个屏幕宽度的图像
- eclipse-plugin - 如何动态更新有助于 org.eclipse.ui.menus 扩展的菜单标签
- powershell - 如何强制函数返回单个元素数组而不是包含的对象?
- c# - ASP.NET Core 服务未创建 RabbitMQ 队列
- python - 如何根据特定条件创建一列特定值的零?
- pdf - 试图理解 PDF 中交叉引用 (XRef) 流中的数据