在Drupal7中向表单添加字段的ajax请求之后,jQuery停止工作

在Drupal7中向表单添加字段的ajax请求之后,jQuery停止工作,ajax,drupal,jquery,drupal-7,Ajax,Drupal,Jquery,Drupal 7,我认为这不是一个特定于Drupal的问题,而是一个一般的jquery/ajax问题: 基本上,我正在尝试使用javascript添加表单字段,并在同一表单中的“小计”字段中显示结果。在我单击添加另一个字段(通过ajax)的选项之前,一切都正常工作,然后将我的“小计”字段更改为零,并且在删除该字段之前不会再次工作 下面是将字段相加的函数: function calculateInvoiceFields(){ var total = 0; var rate = 0; var quantity = 0

我认为这不是一个特定于Drupal的问题,而是一个一般的jquery/ajax问题:

基本上,我正在尝试使用javascript添加表单字段,并在同一表单中的“小计”字段中显示结果。在我单击添加另一个字段(通过ajax)的选项之前,一切都正常工作,然后将我的“小计”字段更改为零,并且在删除该字段之前不会再次工作

下面是将字段相加的函数:

function calculateInvoiceFields(){
var total = 0;
var rate = 0;
var quantity = 0;
var i = 0;
var $ = jQuery;

    $("#field-aminvoice-data-values tr").each(function(){
        // quantity field number
        quantity = $("#edit-field-aminvoice-data-und-"+i+"-field-aminvoice-quantity-und-0-value").val();
        // rate field as number
        rate = $("#edit-field-aminvoice-data-und-"+i+"-field-aminvoice-rate-und-0-value").val();
        if(!isNaN(quantity) && !isNaN(rate)){
            total  += quantity*rate;
        }
        i++;
    });

return total;   
}
以下是为.ready和.live启动的函数:

jQuery(document).ready(function(){
    var $ = jQuery;
    $(".field-type-commerce-price input").val(calculateInvoiceFields());
});


jQuery(function(){
    var $ = jQuery;
    $(".form-text").live('change', function(){
        $(".field-type-commerce-price input").val(calculateInvoiceFields());
    });
});

任何想法都会大有帮助。提前谢谢

通常,当抛出错误时,它会停止工作。您是否检查了javascript控制台(firefox firebug或chrome内置)是否有任何错误迹象?

我建议对任何绑定语句使用“on”。“关”表示解开束缚。 它在AJAX调用后不起作用的原因是,您需要注意将该元素添加到DOM中,以及加载后附加到该元素的事件。如果在中加载新元素,并且没有任何监视,则不会将事件监视添加到该新DOM元素中。 详情如下:

function calculateInvoiceFields(){
   /*..*/
return total;   
}


$(document).ready(function(){
    $(".field-type-commerce-price input").val(calculateInvoiceFields());
    $("body").on('change', ".form-text", function(){
        $(".field-type-commerce-price input").val(calculateInvoiceFields());
    });
});

谢谢,我应该提到并没有抛出任何错误。听起来这个问题与ajax回调有关,它并没有显示出来。尽管live()已经被弃用,但它仍然是未来元素的一种委托方法。没有额外的监听这很有意义,但看起来jQuery1.7中引入了“on”语句。目前,Drupal7使用1.5及以下版本。然后您可以使用`.delegate(“.formtext”,“change”,function(){})`