jQuery.change with.each内部未正确触发

jQuery.change with.each内部未正确触发,jquery,each,Jquery,Each,我有一个简单的.change函数,它进入数据库,获取一些值,设置一些值,等等 $('.linequantity').change(function() { ... $.getJSON(url, function(data) { $('#TT-' + lineItem).text(parseFloat(data['price']) * quantity); }); }); 我想做的是,在任何一行Quantites发生变化时,我想更新小计。(是的,它是目录类型/

我有一个简单的.change函数,它进入数据库,获取一些值,设置一些值,等等

$('.linequantity').change(function() {
    ...
    $.getJSON(url, function(data) {
      $('#TT-' + lineItem).text(parseFloat(data['price']) * quantity);
    });
});
我想做的是,在任何一行Quantites发生变化时,我想更新小计。(是的,它是目录类型/购物车类型的应用程序)。我的想法是,让我们各用一个

$('.linequantity').each(function(){
     ...
   var url = "jQueryFunctions.php?action=getPrice&quantity=" + quantity + "&customer=" + customerID + "&item=" + lineItem;

    $.getJSON(url, function(data) {
       subtotal = subtotal + (parseFloat(data['price']) * quantity);
     });
   });

   $('#subtotal').text(subtotal);
但当我这样做时,如果每个都触发,那么小计得到0

我已经厌倦了把每个都放在一个函数中。当我将.each移动到它自己的函数中时,它的触发更加一致,但是.change中的getJSON会被跳过,它工作得很好

在我请求另一个json请求之前,第一个json请求没有完全完成,我是否遇到了冲突

我对方法论的改变持开放态度,但上面的想法/开始是正确的

有什么想法吗

编辑
数量字段

<input type="text" class="linequantity" id="SQ-<?php echo $value['itemNumber']; ?>" name="Quantity" placeholder="#"/>
只能用于元素、框和元素

考虑到这一点,您可能需要调用$().val();获取活动用户选择/输入数据

像这样的东西可能会做到:

$('.linequantity').change(function() {
    var inputData = $(this).val();
    // other stuff!
});

我认为您只是有一个竞争条件,ajax请求完成得太晚了。解决这个问题的唯一方法是让依赖于请求的方法在请求完成后运行。有很多方法可以做到这一点,比如使用
延迟
$。简单的方法很好:

$.getJSON(...)
   .done(function () {
      // Stuff that depends on JSON goes here
   });
.each
中,您依赖于多个请求——可能一次依赖很多请求。我会尝试在一个请求中实现这一点(例如,更新服务器代码以接受项目列表并计算小计,而不是一次一个)。否则,您必须不断更新小计,这可能会导致它在视觉上闪烁。这对服务器来说也是低效的。您可以执行以下操作:

var jqXHRs = []
$.each(...
   jqXHRs.append($.getJSON(...));
);
$.when(jqXHRs).done(...);

…但我不确定
$。什么时候
可以处理这样的数组,或者是否有任何方法可以将参数列表扩展到它。

哪些HTML元素具有类
linequantity
?你可以包含你的HTML吗?你可以为
getSubtotal
创建一个
action
,这样你就不必在循环中这样做了。@ExplosionPills也许我被jQuery洗脑了,但你所说的action是什么意思?@ManseUK-用一些HTML更新以支持你自己的术语(
jQueryFunctions.php?*action*=getSubtotal…
).change在输入字段上。getJSON上面的…,是.val调用,用于在html页面上获取不同的内容。我在这个问题上走了一条完全不同的路线,但是读了很多关于jQuery事件的文章。完成是确保活动在继续下一个活动之前完成的关键。我接受了,因为是你们让我走上了正轨。谢谢你的帮助。
var jqXHRs = []
$.each(...
   jqXHRs.append($.getJSON(...));
);
$.when(jqXHRs).done(...);