0
我在knockoutJS中創建了一個計算的observable,它支持用戶輸入以及對輸入執行文本操作。.replace()表達式在計算的observable內不被更新
該observable被綁定到輸入字段和標籤。其目的是允許用戶輸入新名稱,但我想阻止用戶使用非字母數字字符。該函數在綁定和評估字符串時都起作用,但替換函數似乎沒有更新。子字符串函數的作用(限制文本爲255個字符),但我認爲我有一些東西在替換中沒有完全正確設置。在當前的功能中,如果輸入非法字符,用戶將收到toastr警報,但替換功能不會替換空白字符。我會很感激任何建議。
HTML
<label class="reportNameTextBox" title="Click to edit report name" data-bind="text: NameFormatted() == null || NameFormatted().trim().length == 0 ? '[ Click To Enter Name ]' : NameFormatted(), css: { 'noData': NameFormatted() == null || NameFormatted().trim().length == 0 }"></label>
<input class="editInput" type="text" data-bind="value: NameFormatted" />
淘汰賽
report.NameFormatted = ko.computed({
read: function() {
return report.Name().substring(0, 255);
},
write: function (value) {
var insertedText = value;
var Exp = /^[a-zA-Z0-9]*$/i;
if (!insertedText.match(Exp)) {
DisplayWarning('Attention', 'Non-alphanumeric may not be used.');
return report.Name(insertedText.substring(0, 255)).replace(/[^a-zA-Z 0-9]+/g, ''); ;
}
else {
DisplayWarning('Success', 'yeah');
return report.Name(insertedText.substring(0, 255));
}
},
owner: this
});
您是否需要將'.replace'鏈接到子字符串(0,255)'括號,而不是'report.Name()' – SmokeyPHP
另外請注意,您的字符類中的空間就像任何其他字符,所以空格不會被模式刪除。 –
@SmokeyPHP這是它的好眼睛!如果您將重新提交作爲答案與評論,我會將其標記爲答案。謝謝 – rlcrews