【问题标题】:jQuery stops working after ajax request that adds fields to a form in Drupal 7jQuery在Drupal 7中向表单添加字段的ajax请求后停止工作
【发布时间】:2012-02-29 19:27:30
【问题描述】:

我不认为这是一个 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());
    });
});

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

【问题讨论】:

  • 听起来问题与未显示的 ajax 回调有关

标签: ajax drupal jquery drupal-7


【解决方案1】:

我建议对任何绑定语句使用“on”。 'off' 表示解除绑定。 它在 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());
    });
});

【讨论】:

  • 虽然 live() 已被弃用,但它仍然是未来元素的委托方法。无需额外收听
  • 这很有意义,但看起来 'on' 语句是在 jquery 1.7 中引入的。目前,Drupal 7 使用 1.5 及以下版本。
  • 那么你可以使用`.delegate(".form-text", "change", function () {});`
【解决方案2】:

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

【讨论】:

  • 谢谢,我应该提到没有抛出错误。
猜你喜欢
  • 2014-07-10
  • 1970-01-01
  • 2013-03-20
  • 1970-01-01
  • 2019-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多