无法计算负数

时间:2017-05-24 16:38:51

标签: javascript jquery

我在同一个类中有几个输入,如果这些输入中的任何一个为空,则返回false。我想要做的是,如果任何输入是负数,则返回false。我认为使用正则表达式可能有一种方法可以做到这一点,但我不确定如何去做。

这是我到目前为止所做的。

CacheLoader

4 个答案:

答案 0 :(得分:1)

可能应该返回this.value =='';

答案 1 :(得分:0)

想法是检查3个条件的值是否为:

  1. 等于===以清空字符串""
  2. 如果将值强制转换为Number会导致NaN
  3. 如果号码(被胁迫时)小于零。
  4. 您可以使用image检查条件并返回值。以下是它如何工作的示例:

    $(".check-inputs").on("click", function () {
      console.log(anyInvalid());
    });
    
    function anyInvalid () {
      return Array.prototype.some.bind($(".quantity"))(function (elem) {
        return elem.value === "" || isNaN(Number(elem.value)) || Number(elem.value) < 0;
      });
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <input type="text" class="quantity" value="1"/><br/>
    <input type="text" class="quantity" value="2"/><br/>
    <input type="text" class="quantity" value="3"/><br/>
    <input type="text" class="quantity" value="-4"/><br/>
    <input type="text" class="quantity" value=""/><br/>
    
    <button class="check-inputs">Check Inputs</button>

答案 2 :(得分:0)

使用Array.prototype.every()函数检查数组中的每个输入是否都通过了给定的测试。首先,使用jQuery的.get()将输入作为数组。然后通过Array.prototype.every运行元素,如果任何元素在给定的测试中失败,它将返回false。

function arePositiveOrZero(selector){
  return $(selector)
           .get() // Convert to array
           .every( node => parseInt(node.value) >= 0 ) // Check all elements are >= 0
}

// Tests that log to the console
console.log({hasNeg: arePositiveOrZero('.hasNeg')}) // false
console.log({hasBlank: arePositiveOrZero('.hasBlank')}) // false
console.log({hasZero: arePositiveOrZero('.hasZero')}) // true
console.log({allPos: arePositiveOrZero('.allPos')}) // true
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input class="hasNeg" type="text" value="1">
<input class="hasNeg" type="text" value="-1">

<input class="hasZero" type="text" value="0">
<input class="hasZero" type="text" value="1">

<input class="hasBlank" type="text" value="1">
<input class="hasBlank" type="text" value="">

<input class="allPos" type="text" value="2">
<input class="allPos" type="text" value="3">

如果您不想包含零,只需将测试功能更改为node => node.value > 0

即可

答案 3 :(得分:0)

我找到了一个适合我的解决方案,如果找到的数字小于零,则返回false。我说它比现在更复杂。

          var $nonneg = $('.quantity').filter(function(){
            return this.value < 0;
          });
          if ($nonneg.length != 0) {
            return false;
          }