首页 > 解决方案 > 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 无法更新格式化的值。闪电输入元素仍然能够接受字母。

标签: salesforce-lightning

解决方案


我们可以使用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)
    }
}

})


推荐阅读