【问题标题】:Knockout JS Count only numbers in maxLength attribute淘汰赛 JS 只计算 maxLength 属性中的数字
【发布时间】:2021-03-28 18:20:20
【问题描述】:

有没有办法操纵 maxLength 属性只计算数字? 我看过这段代码MyObservable.replace(/[^0-9]/g, '').length,它只能数数,但我不知道放在哪里。或者任何更好的想法。谢谢

【问题讨论】:

  • Maxlength 查看字符数,而不仅仅是数字。你在这里的用例是什么?您可能需要一种不同的方法。
  • 是的,我需要另一种方法来计算 maxlength,只计算数字,因为我有类似税率输入的内容,并且允许 Decimal 和 max value of 100,但我不想在其中包含点 (.)计算长度,我不想有数千个值,所以 maxLength="3" or maxlength="5" 不是我需要的。

标签: html knockout.js


【解决方案1】:

如果您想限制为某个数量而不是字符串的长度,则需要使用自定义绑定。有两种选择,一种是input="text",第二种是input="number"

与第一个不同之处在于,您需要在下面的代码中包含一个有点像您的示例的正则表达式,而使用第二个选项,浏览器已经解决了这个问题,我将由您决定你想用这个去哪里。

ko.bindingHandlers.maxValue = {
    init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
        var valueObservable = valueAccessor();

        ko.utils.registerEventHandler(element, "change", function () {
            var value = Number(element.value);
          if (value >= 0) {
            if (value > allBindings().maxAmount) {
                value = allBindings().maxAmount;
            }
            element.value = value;
            valueObservable(value);
          }
        });
    },
};

var ViewModel = function ()
{
    var self = this;
  self.value = ko.observable();
};

ko.applyBindings(new ViewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<input type="number" data-bind="maxValue: $root.value, maxAmount: 100" />

【讨论】:

    猜你喜欢
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多