有没有办法限制用户在oracle jet中输入超过一定限制的字符

Is there a way to restrict users from entering characters beyond a certain limit in oracle jet

在oracle jet中有没有办法限制用户输入超过一定限制的字符? input html 元素的 maxlength 属性不允许用户输入超出最大长度的字符。

根据评论编辑:

不幸的是,OJET 没有提供这样做的方法。可以通过 jQuery 像这样完成:

HTML

<oj-input-text id="text-input" value="{{value}}"></oj-input-text>

JS

this.value = ko.observable("Green");
self.bindingsApplied = function(){
    $($('#text-input').find('input')[0]).attr('maxlength','5');
};

bindingsApplied是OJET在viewModel与HTML绑定后隐式调用的方法。它类似于 $(document).ready();


原回答:

是的。您不仅可以限制允许的字符数,还可以在不满足要求时提供自定义错误消息 - 或者让 OJET 显示默认值。

HTML:

<oj-input-text value="{{value}}"
              validators="[[validators]]"
              placeholder="up to 10 characters">
</oj-input-text>

JS:

self.validators = ko.computed(function()
{
  return [{
    type: 'length', 
    options: {max: 10,
              messageSummary : {
        tooLong: 'Too Long: Too many characters'
      }}}];
});

更多示例here

如果您使用的是通用输入支架,您将失去许多 OJET 功能。要使用 OJET 指定的组件实现相同的目标,我认为这就是您应该做的 -

我已经实现了输入框,它接受恰好 8 个字符的输入并且您可以进行任何其他自定义验证 -

HTML(输入元素)

<oj-input-text  data-bind="event:{keyup: sortCodeEventUp }"
            type="text"
            :id="sortCode"
            name="sortCode"
            raw-value="{{sortCodeRawValue}}"
            value="{{sortCode}}"
            validators="{{[sortCodeValidator]}}"
            required>
</oj-input-text>

JS

self.sortCodeRawValue = ko.observable();
var sortCodePrevValue = "";

self.sortCodeValidator = {
    validate: function (value) {
        if (value.length !== 8) {
            throw new Error("You must enter 8 charecters");
        }
    }
};

self.sortCodeEventUp = function () {
    if (self.sortCodeRawValue().length <= 8) {
        sortCodePrevValue = self.sortCodeRawValue();
    } else {
        $("#sortCode").val("");
        $("#sortCode").val(sortCodePrevValue);
    }
};

行为
输入8个字符后,按第9个字符,它会自动删除(目的是限制用户输入超过限制的字符数)