我在knockoutJS中创建了一个计算的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
});
答案 0 :(得分:0)
我相信你的问题就在于这条线:
return report.Name(insertedText.substring(0, 255)).replace(/[^a-zA-Z 0-9]+/g, '');
您将replace
方法链接到错误的对象(report.Name
而不是substring
)
return report.Name(insertedText.substring(0, 255).replace(/[^a-zA-Z 0-9]+/g, ''));
只需在支架内移动替换方法,它就可以按预期工作。