0

我在 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
});
4

1 回答 1

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, ''));

只需将替换方法移动到括号内,它应该可以按预期工作。

于 2013-09-26T15:36:55.690 回答