我正在尝试使用 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>
最佳答案
更改
var $this=$(this);
var quantity=$this.val();
至
var quantity = parseInt($(this).val());
- 您不必实例化
$this
即可访问.val()
, - 您必须将值解析为 int,否则返回的是字符串。请参阅下面的说明。
var inventory=$(this).next('td, .item_inventory').text();
至
var inventory = parseInt( $(this).closest('tr').find('.item_inventory').html());
.item_inventory
不是.item_quantity
字段的直接同级字段,因此next()
不会检索 DOM 元素。考虑查找两个元素的父元素,然后使用find()
获取您的元素。- 您仍然需要将值解析为 int。
为什么是整数而不是字符串?
两个字符串比较的结果不是您需要的:字符串比较将两个字符串的每个字符一一比较,最后确定比较结果。
示例:
如果比较'10'和'8',那么当它比较两个字符串时,它会比较两者,它会比较'1' 和 '8',然后是 '0' 和 坚果。
此时,'1' 将比 '8' 更接近字母表的开头,然后无论后面的字符是什么,您的测试都将返回 false是。
参见this article了解更多详情。
关于jquery - 如何使用 jQuery 比较两个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16198404/