1

我正在尝试使用 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>
4

1 回答 1

3

变化

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

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

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。

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

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

例子 :

如果比较'10''8',那么当它比较两个字符串时,它会比较两者,它会比较'1''8',然后是 '0'nuts

在那一刻,'1'将比'8'更接近字母表的开头,然后您的测试将返回 false,无论后面的字符是什么。

有关更多详细信息,请参阅本文

可用的工作小提琴

于 2013-04-24T17:56:00.780 回答