如何使用jQuery比较两个值?

时间:2013-04-24 17:25:09

标签: jquery html compare

我正在尝试使用jQuery来比较html表中的两个值,并在数量>时提醒用户。库存。

我想在当前行中选择值:

JS

    $('.item_quantity').change(function(){       
        var $this=$(this);        
        var quantity=$this.val();        
        // var inventory=$this.next('.item_inventory, td').text();
         var inventory=$(this).next('td, .item_inventory').text();

        console.log('quantity: ', quantity, 'inventory: ', inventory);
        if (quantity > inventory) {
          alert('Your order quantity ' + quantity + ' is greater than ' + inventory + ' inventory');
        }            
    });               
});

HTML

<table >    
  <tr>         
    <td><form method=""><input class="item_quantity" type="text"  data-prodid="249" value=""/></form></td>
    <td  class="item_inventory">10</td>
    <td>Product 1</td>
  </tr>

  <tr>         
    <td><form method=""><input class="item_quantity" type="text" data-prodid="2" value=""/></form></td>
    <td class="item_inventory">7</td>
    <td>Product 2</td>
  </tr>
</table>

1 个答案:

答案 0 :(得分:3)

更改

var $this=$(this);        
var quantity=$this.val(); 

var quantity = parseInt($(this).val());        
  1. 您无需实例化$this即可访问.val()
  2. 您必须将值解析为int,否则返回的是字符串。请参阅下面的说明。

  3. var inventory=$(this).next('td, .item_inventory').text();
    

    var inventory = parseInt( $(this).closest('tr').find('.item_inventory').html());
    
    1. .item_inventory不是您.item_quantity字段的直接兄弟,因此next()将无法检索DOM元素。考虑找到两个元素的父元素,然后使用find()获取元素。
    2. 您仍然需要将值解析为int。

    3. 为什么是int而不是字符串?

      两个字符串比较的结果不是你需要的:字符串比较将逐个比较两个字符串的每个字符,最后确定比较的结果。

      示例:

      如果比较 '10''8',那么当它比较两个字符串时,它将比较它们将比较'1' '8',然后'0'坚果

      此时,'1'将比'8'更接近字母表的开头,然后您的测试将返回false,无论以下字符如何是

      有关详细信息,请参阅this article

      Working fiddle可用。