我需要在Aurelia中創建一個只接受電話號碼的輸入。如果用戶在該輸入中輸入1234567890
,則應該顯示(123) 456-7890
,並將綁定變量設置爲1234567890
。如果用戶輸入(123) 456-7890
,結果應該是相同的。如果用戶在輸入中鍵入字母,則輸入不應該顯示該字母,也不應該更新綁定的JavaScript變量。Aurelia的輸入控制值
我能夠這樣使用ValueConverter部分實現:
phone.ts
export class PhoneValueConverter {
private removeNonDigits(input) {
let digits = '';
// Remove non-digits. i.e. '(', ')', ' ' and '-'
for (let i = 0; i < input.length; i++) {
let char = input.charAt(i);
if ('0' <= char && char <= '9')
digits += char;
}
return digits;
}
toView(value) {
if (!value)
return value;
value = this.removeNonDigits(value);
let formatted = '(' + value.substring(0, 3);
if (value.length >= 3)
formatted += ') ' + value.substring(3, 6);
if (value.length >= 6) {
// Don't place an upper limit, otherwise the user would not
// see the entire value
formatted += '-' + value.substring(6);
}
return formatted;
}
fromView(value) {
let digits = this.removeNonDigits(value);
// Only accept a 9-digit phone number
return digits.substring(0, 10);
}
}
app.html
<template>
${PhoneNumber} <br>
<require from="phone"></require>
<input value.bind="PhoneNumber | phone">
</template>
這工作完全在迫使PhoneNumber
始終爲0-9數字。如果用戶在輸入中鍵入一個字母或第10位數字,它將不會被添加到PhoneNumber
- 正如預期的那樣。但不幸的是,輸入值($('input').value()
,而不是value.bind
)仍將包含額外的錯誤字符。
在控制哪些字符被添加到輸入值中是否存在Aurelia約定?
對於你使用的是什麼$( '輸入')。值()? – kabaehr
@kabaehr,抱歉的混淆。我實際上並不需要使用$('input').value(),我只是將它用作區分邊界值(PhoneNumber的值)和輸入內的實際文本的方法。 –