【问题标题】:check if input is between two int or float then display or not display content检查输入是否在两个 int 或 float 之间然后显示或不显示内容
【发布时间】:2016-01-29 12:07:58
【问题描述】:

在 javascript 中,我需要检查用户在 html 输入中输入的值,如下所示:

<input type="text" id="volume" class="form-control" name="voilume"></input>

<div id"button"></div>

需要知道输入是否在 0,5 和 8 之间(所以我有 int 和 float,你可以理解)。

所以值必须是 >= 0,5 和

如果输入值介于 0,5 和 8 之间,我必须显示一个按钮,否则无事可做。但是如果用户多次更改值,我需要防止。

因此,如果他输入 3,则在 div id=button" 中显示一个按钮,如果它更改为另一个值,例如 2,则继续显示该按钮,但如果他将值输入更改为 100,我需要删除 div id 中的按钮="按钮"。

现在我尝试了类似的方法来测试它是否有效:

var input= $('#volume').val();
    if (input >= 0.5 && input <= 8) {
        $('#button').html('ok');
    } else {
      $('#button').empty();
    }

但它不起作用。

【问题讨论】:

  • 0,5 ??你是说0.5?
  • 你试过parseFloat()吗?
  • @Oxi 对不起0,5 我的问题写得太快了
  • @Oxi 他是法国人,我们这里用逗号作为小数分隔符:)
  • 如何提供 MCVE 来复制您的问题?!​​

标签: javascript jquery html if-statement input


【解决方案1】:

您可以在此处稍微利用 CSS 约束验证。在我看来,这就像一个 X/Y 问题。实际上,我们可以为 &lt;input&gt; 元素设置 minmaxstep 值,然后让浏览器进行验证:

<input type="number" min="0.5" max="8" step="0.1" required id="volume" class="form-control" name="voilume">

除此之外,我们还可以像这样使用伪 CSS 选择器 :valid:invalid

input:valid~div#button {
  display: block;
}

input:invalid~div#button {
  display: none;
}

这会产生这样的效果,如果我们在输入控件中输入一个有效值,按钮就会显示出来。如果没有,按钮就会消失。魔法!

示例:https://jsfiddle.net/4q1fjqwp/

【讨论】:

  • 不错,但是浏览器支持呢?它可以在 Safari 上运行吗? (必需属性/:有效的伪类?!)
  • 现在可以很好地支持 css 约束 API。
  • 我看到对 Safari 的部分支持,但由于我目前无法对其进行测试,我不确定这意味着什么...caniuse.com/#feat=form-validation 无论如何,我喜欢仅将 CSS 用于布局目的 ;)
  • @jAndy 我在 IE8 中测试了你的代码,它不起作用。我该如何解决?
  • @french_dev 好吧,有一些可用的 shim 库,例如:afarkas.github.io/webshim/demos/index.html。因此,如果您想坚持使用所有 HTML5 闪亮的东西,您可以使用它。另一种方法是坚持自己使用 Javascript 进行验证(就像该线程中建议的其他答案一样)。看起来,IE 是唯一不支持这个强大 API 的浏览器。
【解决方案2】:
输入字段的

.val() 是一个字符串,您必须将其转换为数字才能通过 >=、id"button"

function go() {
    var input=parseFloat($('#volume').val(), 10);
    if (input >= 0.5 && input <= 8) {
        $('#button').html('ok');
    } else {
      $('#button').empty();
    }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="volume" class="form-control" name="voilume"/>

<div id="button"></div>

<button onclick="go()">run</button>

【讨论】:

  • @A.Wolff,我不知道。但是:"012" &lt; 013 => false
  • 是的,因为八进制,但您的代码仍然存在同样的问题
【解决方案3】:

当输入包含逗号,时可能会出现问题 所以"0,5" &gt;= 0.5 将返回falseparseFloat("0,5") 将返回0

您需要将, 替换为.

【讨论】:

    【解决方案4】:

    下面的方法会起作用。

    <input type="text" id="myTextField" onblur="change()"/>
    <input type="submit" id="byBtn" value="" />
    

    JavaScript

    function change() {
            var myTextbox = document.getElementById('myTextField').value;
            var button = document.getElementById('byBtn');
            if (parseFloat(myTextbox) >= 0.5 && parseFloat(myTextbox) <= 8) {
                button.value = "OK";
            } else {
                button.value = "";
            }
        }
    

    【讨论】:

      【解决方案5】:

      您需要将字符串值解析为整数。为此使用 parseInt()。
      它会将字符串解析为整数。

      替换这个:

      var input= $('#volume').val();

      通过

      var inputval= parseInt($('#volume').val());

      【讨论】:

      • 他需要float,所以parseFloat而不是parseInt
      • @Raj 不,他不必解析它,与数字相比,它已经被解析了
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-09
      • 1970-01-01
      • 2018-05-30
      • 2010-12-31
      • 2014-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多