【问题标题】:prevent input character in input type number with knockout [duplicate]用敲除防止输入类型号中的输入字符[重复]
【发布时间】:2015-05-01 14:23:26
【问题描述】:

我必须防止用户在带有敲除的输入类型文本中插入非数字值:

这是我的 HTML:

<input data-bind="value: myModel.myNumber, valueUpdate: 'afterkeydown', event: { change: validateMyNumber }" type="number" />

这里是js:

self.validateMyNumber = function (data, event) {
     var input = data.myModel.myNumber();
      if (input == "")
      {

      }
};

我在 validateMyNumber 函数中找不到要编写的逻辑......当我按下按钮时,它不是一个数字,我在模型中丢失了旧值,我得到一个空字符串......在textBox 没有任何改变... 我只是希望如果我插入一个非数字值,我必须阻止在文本框中插入......我该怎么办?

【问题讨论】:

标签: jquery input knockout.js numbers


【解决方案1】:

我将其用作 input[type=number] 元素的全局规则。您不需要任何特定于淘汰赛的东西。

$(document).on('keypress change focus', 'input[type="number"]', function (e) {
    var isKeypress = e.type === 'keypress';
    var isChange = e.type === 'change';
    var isFocus = e.type === 'focus' || e.type === 'focusin';
    var charTyped = String.fromCharCode(e.which);
    var $el = $(this);

    // store original value to revert change that invalidates min
    if (isFocus) {
        this.originalVal = $el.val();
        return;
    }

    // block invalid keystrokes
    if (isKeypress) {
        // don't allow non-numeric chars
        if (!/^[\.0-9]$/.test(charTyped)) {
            e.preventDefault();
            return;
        }

        // don't allow double periods (123.456.789)
        if (charTyped === '.' && $el.val().indexOf('.') > -1) {
            e.preventDefault();
            return;
        }
    }

    // don't allow >max or <min values
    if (isChange) {
        var min = $el.attr('min');
        var max = $el.attr('max');
        var amt = parseInt($el.val() + charTyped);

        if (max && amt > max || min && amt < min) {
            // revert change
            $el.val(this.originalVal);
            $el.focus();
        }
    }
});

【讨论】:

  • 我已经尝试过使用 jQuery 但没有成功...我不知道为什么但我从来没有进入过那个函数
  • 有了这段代码,如果你设置了一个断点,当你输入一些东西时它会被命中吗?
  • no :( 从来没有.. 我认为是淘汰赛阻止进入此代码
  • 我将这个精确的 sn-p 与 Knockout 一起使用,所以我不确定发生了什么,除非它不在 document.ready 中。您还可以为此编写自定义绑定;现在没有时间,但我会尽量在一天结束前举个例子。
  • 谢谢...我写了一个自定义绑定...它对我有用...
猜你喜欢
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 2011-10-25
  • 2015-10-13
  • 1970-01-01
  • 2017-04-27
  • 2018-01-31
  • 2015-02-08
相关资源
最近更新 更多