Salesforce闪电输入的element.set在夏季18发布后不再工作

时间:2018-05-28 08:09:42

标签: salesforce-lightning

我正在使用下面的代码片段检查有效的电话号码格式,然后尝试将格式化的值设置为当前的输入元素。但是在夏季18发布之后,我无法使用新的格式化值设置输入。

TestApp

<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无法更新格式化的值。闪电输入元素仍然可以接受字母表。

1 个答案:

答案 0 :(得分:0)

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

})