【问题标题】:Limit input box to 0-100限制输入框为 0-100
【发布时间】:2010-11-25 22:13:05
【问题描述】:

我有一个输入框,其取值范围为 0-100。我想阻止用户写任何更大或更小的东西。

我一直在使用 jquery keyfilter 插件来限制字段的输入: http://code.google.com/p/jquery-keyfilter/

这个插件可以将输入限制为数字,但不在一个范围内。如何防止用户输入超出范围的数字。谢谢。

【问题讨论】:

    标签: javascript jquery input limit keyfilter


    【解决方案1】:

    document.getElementById("test_id").onkeyup = function() {
      var input = parseInt(this.value);
      if (input < 0 || input > 100)
        console.log("Value should be between 0 - 100");
      return;
    }
    &lt;input type="text" id="test_id" /&gt;

    【讨论】:

    • 如果您不使用警报,我可以接受。我讨厌这种通知的弹出窗口。
    【解决方案2】:

    由 jQuery 来做这个

    <input type="number" name="quantity">
    

    如果数字不在 0 - 100 之间,则为空输入字段

    <script>
        $("input[name='quantity']").change(function() {
          number = $("input[name='quantity']").val()
           if( number <= 0 || number >= 100 ) {
               $("input[name='quantity']").val("");
               alert("0 - 100");
             }
           });
    </script>
    

    【讨论】:

      【解决方案3】:

      HTML5 added several new input types,包括number

      <form>
        Quantity (between 1 and 100):
        <input type="number" name="quantity" min="1" max="100">
      </form>
      

      旧版网络浏览器不支持的新输入类型将表现为&lt;input type="text"&gt;

      Runnable example 来自 W3Schools。

      【讨论】:

        【解决方案4】:

        你可以使用 Math.max 和 Math.min

        val = Math.min(100,Math.max(0,val));
        

        【讨论】:

          【解决方案5】:

          如果只是字符数不超过20(例如),那么你可以使用

          <input type="text" name="usrname" maxlength="20" />
          

          如果您需要在输入字段中处理一些其他情况,那么函数将是更好的选择。

          【讨论】:

          • 这是关于输入的值,而不是字符串的长度!
          【解决方案6】:

          我建议使用 jQuery Validation 插件。非常灵活和可扩展。要处理您的范围查询,请执行以下操作。它将验证您的表单中标有“百分比”类的任何输入都存在并落在给定范围内。

          $("#myform").validate({
            rules: {
              percentage: {
                required: true,
                range: [0, 100]
              }
            }
          });
          
          <input id="percent" name="percent" class="percentage" />
          

          我建议使用该插件的原因是它可以开箱即用地处理许多验证情况,从而减轻您为许多场景编写验证代码的责任——您可以以更好的方式发挥您的创造力。它也被许多人使用,因此具有被大型社区改进的额外优势。

          更新:此外,您可能需要考虑另一种输入机制,例如 slider (demo),它将以不受用户约束的方式约束数据错误——或者至少不是这种特殊类型的错误。

          【讨论】:

          • 感谢您的帮助。我有一个滑块和一个输入框。幻灯片与输入框挂钩,反之亦然。我不使用验证的原因是因为输入太大的值只会将滑块设置为 100%,但输入框不会跟随,这很奇怪。此外,模糊事件可能会使用户离开页面/隐藏输入字段,并且用户将得到一个损坏的值而不会看到错误。
          • @Jourkey -- 查看我对已接受答案的评论。创建滑块时我会隐藏输入。如果这不是一个选项,至少我会抛出一个警告,而不是让表单提交而不是强制值。
          【解决方案7】:

          像这样使用纯 Javascript:

          <script>
            function handleChange(input) {
              if (input.value < 0) input.value = 0;
              if (input.value > 100) input.value = 100;
            }
          </script>
          

          然后像这样声明输入框:

          <input type="text" onchange="handleChange(this);" />
          

          因为你已经将此函数挂钩到 onchange(),所以即使用户将某些内容复制/粘贴到输入框中,它也会起作用。

          【讨论】:

          • 非常感谢。我将如何绑定事件使其不是内联的?
          • -1 强制可接受的值是一种可怕的界面设计。粗心的用户可以通过这种方式轻松输入意外数据。您应该将数据标记为无效并让用户选择如何调整它。也许,他们只是输入了错误的框,而该值确实属于其他地方,在那里它是有效的。
          • 我绝对明白你的意思。但这不正是滑块的作用吗?当您尝试超过 100 时,它只会迫使您回到 100/最大值。
          • @Jourkey -- 是的,但它是一种不同类型的界面元素。你不能强迫它超过限制。使用文本框,您可以键入 134,而不会注意到它会默默地将其更改为 100。理想情况下,您会使用带有验证的输入(服务器端),该输入被 javascript 隐藏并替换为填充输入值的滑块。这样,它为大多数用户提供了适当的界面,但在没有 javascript 时会优雅地降级。
          • 我喜欢你也包含了 HTML 输入。不仅仅是 JavaScript。对于刚学习这些东西的人来说,这真的会让你在把这些东西拼凑在一起时摸不着头脑。
          【解决方案8】:

          您只需要在每次击键之后和将其发送到字段之前(例如使用按键事件处理程序)测试字段的值 - 如果新的按键会创建一个过高的值,则拒绝按键。

          例如 - 如果当前值为 20 并且用户尝试键入第三个数字,您应该通过从事件处理程序返回 false 来拒绝按键。基本上,您应该允许的唯一第三个字符是“0”,并且仅当当前字段值为“10”时。

          【讨论】:

          • 我建议不要使用这种方法。至少将其更改为模糊事件。人们不喜欢他们的输入在完成输入之前得到验证。更不用说,无需按键即可填充文本框。 (鼠标粘贴)
          猜你喜欢
          • 2013-05-27
          • 2013-08-11
          • 2012-02-14
          • 1970-01-01
          • 2019-08-02
          • 2014-07-06
          • 1970-01-01
          • 2018-03-25
          • 1970-01-01
          相关资源
          最近更新 更多