Knockout JS 只计算 maxLength 属性中的数字
Knockout JS Count only numbers in maxLength attribute
有没有办法操纵 maxLength 属性来只计算数字?
我看到这段代码 MyObservable.replace(/[^0-9]/g, '').length
只能计算数字,但我不知道放在哪里。或者任何更好的想法。谢谢
如果您想要限制为特定数量而不是字符串的长度,则需要使用自定义绑定。有 2 个选项,第一个是 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" />
有没有办法操纵 maxLength 属性来只计算数字?
我看到这段代码 MyObservable.replace(/[^0-9]/g, '').length
只能计算数字,但我不知道放在哪里。或者任何更好的想法。谢谢
如果您想要限制为特定数量而不是字符串的长度,则需要使用自定义绑定。有 2 个选项,第一个是 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" />