我在 knockoutJS 中创建了一个计算的 observable,它支持用户输入以及对输入执行文本操作。
这个 observable 绑定到输入字段和标签。目的是允许用户输入新名称,但我想阻止用户使用非字母数字字符。该函数适用于字符串的绑定和评估,但替换函数似乎没有更新。substring 函数有效(将文本限制为 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
});