【问题标题】:if input field is not a number OR not empty replace with a number如果输入字段不是数字或不为空,则替换为数字
【发布时间】:2014-11-03 23:29:19
【问题描述】:

我有一个输入字段,我正在使用 .on('input') 函数监控更改,因为这涵盖了 .change 和 .keyup。

没有提交按钮,但我只想根据输入的内容更改输入字段的行为。

稍后我将验证服务器端,我使用的是 html5 type='number'。

我只希望该字段能够容纳一个数字,或者它可以为空。例如,用户可能希望清空内容以键入数字 15。

但是我不希望接受任何其他字符 - 如果输入了这些字符,则应显示提示通知用户这一点,并且该字段默认返回其起始值 1。

HTML

<input type="number" class="input-field" placeholder="" value="1" min="1">

JS

$(document).ready(function ($) {

    var num = $('input[type="number"]').val();

    $('input[type="number"]').on('input', function () {
        var num = $(this).val();

        if (num < 1 || isNaN(num) || num !== '') {
            alert(num + ' is not a number or is less than 1');
            $(this).val(1);
        }

    });
});

我已尝试使用上述代码,但它不允许空字段。我也试过if (num &lt; 1 || isNAN(num) || num.length != 0) {

我需要将.replace() 与Regexr 一起使用吗?我一直在这里查看一些问题,例如here,但考虑到我正在测试空字符串,我不确定这就是我要寻找的内容。

JSFIDDLE

【问题讨论】:

  • isNAN 应该是isNaN
  • 我只会强制该值在您的参数范围内。我会在稍后发布答案。
  • @VenkataPanga thx 已更新问题但仍然失败
  • @Evilzebra 好的,谢谢
  • this.validity.valid 足以检查 html5 元素的有效类型检查

标签: javascript jquery regex input replace


【解决方案1】:

您可以使用constraint validation API:

$('input[type="number"]').on('input', function () {
    if (!this.validity.valid) {
        alert(this.value + ' is not a number or is less than 1');
        this.value = 1;
    }    
});

$('input[type="number"]').on('input', function () {
    if (!this.validity.valid) {
        alert(this.value + ' is not a number or is less than 1');
        this.value = 1;
    }    
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="number" class="input-field" placeholder="" value="1" min="1">

但是,请注意,这种行为是突兀的。如果用户键入了错误的键,你会用一个模态对话框惹恼他并清除数字。

考虑什么都不做。如果输入无效,HTML5 浏览器将不会发送表单。

【讨论】:

    【解决方案2】:

    HTML5 的答案肯定更优雅。

    但如果您想提供更多支持,这通常是我尝试验证号码时采用的途径。

    请注意,我使用的是data-min 属性,但如果您想切换,您可以随时使用$.attr() 来获取您的min="" 属性。

    $(document).ready(function ($) {
        $('input[type="number"]').on('change', function () {
            var min = parseInt(this.dataset.min),
                num = isNaN(parseInt(this.value)) ? 0 : parseInt(this.value),
                clamped = Math.max(num, min);
    
            if(num != clamped) {
                alert(num + ' is less than 1');
                this.value = clamped;
            }
        });
    });
    

    jsfiddle

    【讨论】:

    • 感谢您的洞察
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-12
    • 2018-11-27
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 2017-11-18
    相关资源
    最近更新 更多