在jQuery'中使用类名;s.最近的()
我正在尝试对“运行总数”进行一些计算,这是我的代码:在jQuery'中使用类名;s.最近的(),jquery,class,math,closest,Jquery,Class,Math,Closest,我正在尝试对“运行总数”进行一些计算,这是我的代码: $('.quantity_input').live('change',function(){ var ValOne = parseFloat($(this).val()); var ValTwo = parseFloat($(".price").text()) var totalTotal = ((ValOne) * (ValTw
$('.quantity_input').live('change',function(){
var ValOne = parseFloat($(this).val());
var ValTwo = parseFloat($(".price").text())
var totalTotal = ((ValOne) * (ValTwo));
$('.cost_of_items').closest('.cost_of_items').text(totalTotal.toFixed(2));
calcTotal();
});
.quantity_input是一个输入,.price是产品的价格,.cost_of_items是我想更新该项目总成本的地方,即item1=£5 x 3 quantity=£item1总计15
calcTotal()是一个只更新订单总成本的函数。问题是将所有的数学都放在表的一行中,即我在上面的代码中进行计算,而不是停留在它的行上,而是用class.cost\u of\u items等更新所有字段
显示我的html的问题在于它是由jQuery.appends()动态添加的,但下面是相关的jQuery:
$('#items').append('<tr class="tableRow"><td><a class="removeItem" href="#"><img src="/admin/images/delete.png"></img></a><td class="om_part_no">' + omPartNo + '</td><td>' + supPartNo + '</td><td>' + cat + '</td><td class="description">' + desc + '</td><td>' + manuf + '</td><td>' + list + '</td><td>' + disc + '</td><td><p class="add_edit">Add/Edit</p><input type="text" class="quantity_input" name="quantity_input" /></td><td class="price_each_nett price">' + priceEach + '</td><td class="cost_of_items"></td><td><p class="add_edit">Add/Edit</p><input type="text" class="project_ref_input" name="project_ref_input" /><p class="project_ref"></p></td></tr>');
最近的将找到最近的祖先(父母、祖父母),但随后需要进行查找以找到要更新的正确元素。例如,如果表行中有一个元素,而该行中需要另一个元素:
$('.myElement').closest('tr').find('.someOtherElement');
编辑:
在你的情况下,你会想要
$(this).closest('tr').find('.cost_of_items').text(totalTotal.toFixed(2));
您需要在包含此
的
中找到项目的.cost\u
:
$(this).closest('tr').find('.cost_of_items')
您不需要使用“查找…”。这有助于缩小搜索范围。你应该使用它。我不会使用.find()
。我猜,使用.cost\u of_items
类遍历最近的
并获取兄弟
可能会更有效
编辑:为了澄清,这里是.append()
中的标记:
“+omPartNo+”
“+supPartNo+”
“+cat+”
“+desc+”
“+manuf+”
“+列表+”
“+光盘+”
添加/编辑
“+priceEach+”
添加/编辑
此处看起来错误的行是$(“.cost\u of_items”)。最接近(“.cost\u of_items”)
。您也可以给我们看一下您的HTML吗?((ValOne)*(ValTwo))中的所有括号完全没有作用。@用户-您的.append()
中缺少了一个结束标记。上下文参数只是使返回的结果必须在特定祖先的上下文中。因为.cost\u of_items
不是.quantity\u input
的祖先,所以仍然需要一些其他方法,比如.find()
。是的,请不要投票给我,因为询问者的代码问题太大,他必须使用find()在一个事件中调用“最近的”,而不是让上下文随时可用。不确定你是否指的是我,但如果是,我没有投你反对票。我刚才指出了错误。@user-您的代码很好。您在接收事件的元素上有一个起点,需要获得与该起点相关的适当的.cost\u项目元素。我认为这是一个好的答案。我想我应该规定,根据事件的绑定方式,您可能已经有了上下文。cost_of_items不是兄弟姐妹,而是兄弟姐妹的后代。@Keith-谢谢您的否决票,但您错了<代码>
。对不起-我读得很快,还以为是tr。我要撤销我的密码vote@Keith-没问题。谢谢你的撤销。
$(this).closest('tr').find('.cost_of_items')
$(this).closest('td').siblings('.cost_of_items');
<tr class="tableRow">
<!-- NOTE THAT THE CLOSING </td> IS MISSING FOR THE FIRST <td> -->
<td><a class="removeItem" href="#"><img src="/admin/images/delete.png"></img></a>
<td class="om_part_no">' + omPartNo + '</td>
<td>' + supPartNo + '</td>
<td>' + cat + '</td>
<td class="description">' + desc + '</td>
<td>' + manuf + '</td>
<td>' + list + '</td>
<td>' + disc + '</td>
<!-- TRAVERSE TO HERE -->
<td>
<p class="add_edit">Add/Edit</p>
<!-- START HERE -->
<input type="text" class="quantity_input" name="quantity_input" />
</td>
<td class="price_each_nett price">' + priceEach + '</td>
<!-- SIBLING IS HERE -->
<td class="cost_of_items"></td>
<td><p class="add_edit">Add/Edit</p><input type="text" class="project_ref_input" name="project_ref_input" /><p class="project_ref"></p></td>
</tr>