2012-07-19 118 views
1

我被困在试图转换一个JavaScript文件,在d6完美运行到d7,我一直在搜索有关drupal行为的信息,但似乎无法找到解决此问题的正确方式。Drupal 7 jQuery drupal行为问题

以下脚本返回一个意外的令牌错误),用于(jQuery)之前的结束括号。

(function($){ 

var VAT = 0.2; 
var QUANTITY_SUFFIX = "field-po-quantity"; 
var PRICE_SUFFIX = "field-po-price"; 
var SUBTOTAL_SUFFIX = "field-po-item-st"; 
var VAT_SUFFIX = "field-po-item-vat"; 
var TOTAL_SUFFIX = "field-po-item-total"; 

var quantityFields; 
var priceFields; 
var fieldsValid = false; 

function isNumber(value) { 
    return !isNaN(parseFloat(value)) && 
     isFinite(value); 
} 

function validValue(value) { 
    return isNumber(value) && 
     parseFloat(value) > 0; 
} 

function addCommas(nStr) { 
    nStr += ''; 
    var x = nStr.split('.'); 
    var x1 = x[0]; 
    var x2 = x.length > 1 ? '.' + x[1] : ''; 
    var rgx = /(\d+)(\d{3})/; 
    while (rgx.test(x1)) { 
    x1 = x1.replace(rgx, '$1' + ',' + '$2'); 
    } 
return x1 + x2; 
} 

function decimalise(value) { 
    if (isNumber(value)) { 
    var numericValue = parseFloat(value); 
    return numericValue.toFixed(2); 
    } 
} 

function validateFields() { 
    var fieldsValid = true; 
    var allFields = new Array(); 

    quantityFields = jQuery('input[id*="' + QUANTITY_SUFFIX + '"]'); 
    priceFields = jQuery('input[id*="' + PRICE_SUFFIX + '"]'); 

    allFields.push.apply(allFields, quantityFields); 
    allFields.push.apply(allFields, priceFields); 

    for (i=0; i<allFields.length; i++) { 
    var field = allFields[i]; 
    var valueString = field.value; 
    if (!validValue(valueString)) { 
     field.style.borderStyle="solid"; 
     field.style.border="inset 1px red"; 
     fieldsValid = false; 
    } else { 
     field.style.borderStyle="none"; 
    } 
    } 
    this.fieldsValid = fieldsValid; 
} 

jQuery(document).click(function() { 
    validateFields(); 
    if (fieldsValid) { 
    var subTotalSum = 0; 
    var vatSum = 0; 
    var totalSum = 0; 
    jQuery('#field-po-items-values tbody tr:not(.content-multiple-removed-row)').each(function(){ 
     var quantityString = jQuery(this).find('input[id*="' + QUANTITY_SUFFIX + '"]').val(); 
     var numericQuantity = decimalise(quantityString); 
     var priceString = jQuery(this).find('input[id*="' + PRICE_SUFFIX + '"]').val(); 
     var numericPrice = decimalise(priceString); 
     var subtotal = parseFloat(numericPrice * numericQuantity); 
     jQuery(this).find('input[id*="' + SUBTOTAL_SUFFIX + '"]').val(addCommas(decimalise(subtotal))); 
     var vat = subtotal * VAT; 
     jQuery(this).find('input[id*="' + VAT_SUFFIX + '"]').val(addCommas(decimalise(vat))); 
     var total = subtotal + vat; 
     jQuery(this).find('input[id*="' + TOTAL_SUFFIX + '"]').val(addCommas(decimalise(total))); 
     subTotalSum += subtotal; 
     vatSum += vat; 
     totalSum += parseFloat(total); 
    }); 
    jQuery('input[id*="edit-field-po-subtotal"]').val(addCommas(decimalise(subTotalSum))); 
    jQuery('input[id*="edit-field-po-vat"]').val(addCommas(decimalise(vatSum))); 
    jQuery('input[id*="edit-field-po-total"]').val(addCommas(decimalise(totalSum))); 
    } 
} 

})(jQuery); 

该文件正被从调用的template.php,利用插入在该文件的顶部,而不是下前处理或任何drupal_add_js。

据我了解,jQuery的(文件)。点击(函数(){也可能会导致一个问题,最终可能对意外的标记错误的原因?

预先感谢您

回答

1

我唐`吨知道你的代码是否是正确的,但强烈建议使用JavaScript在Drupal> 7这样:

(function ($) { 
    Drupal.behaviors.yourFunction = { 
     attach: function(context, settings) { 

      var VAT = 0.2; 
      var QUANTITY_SUFFIX = "field-po-quantity"; 
      var PRICE_SUFFIX = "field-po-price"; 
      var SUBTOTAL_SUFFIX = "field-po-item-st"; 
      var VAT_SUFFIX = "field-po-item-vat"; 
      var TOTAL_SUFFIX = "field-po-item-total"; 

      var quantityFields; 
      var priceFields; 
      var fieldsValid = false; 

      function isNumber(value) { 
       return !isNaN(parseFloat(value)) && 
        isFinite(value); 
      } 

      function validValue(value) { 
       return isNumber(value) && 
        parseFloat(value) > 0; 
      } 

      function addCommas(nStr) { 
       nStr += ''; 
       var x = nStr.split('.'); 
       var x1 = x[0]; 
       var x2 = x.length > 1 ? '.' + x[1] : ''; 
       var rgx = /(\d+)(\d{3})/; 
       while (rgx.test(x1)) { 
        x1 = x1.replace(rgx, '$1' + ',' + '$2'); 
       } 
       return x1 + x2; 
      } 

      function decimalise(value) { 
       if (isNumber(value)) { 
        var numericValue = parseFloat(value); 
        return numericValue.toFixed(2); 
       } 
      } 

      function validateFields() { 
       var fieldsValid = true; 
       var allFields = new Array(); 

       quantityFields = $('input[id*="' + QUANTITY_SUFFIX + '"]'); 
       priceFields = $('input[id*="' + PRICE_SUFFIX + '"]'); 

       allFields.push.apply(allFields, quantityFields); 
       allFields.push.apply(allFields, priceFields); 

       for (i=0; i<allFields.length; i++) { 
        var field = allFields[i]; 
        var valueString = field.value; 
        if (!validValue(valueString)) { 
         field.style.borderStyle="solid"; 
         field.style.border="inset 1px red"; 
         fieldsValid = false; 
        } else { 
         field.style.borderStyle="none"; 
        } 
       } 
       this.fieldsValid = fieldsValid; 
      } 

      $(document).click(function() { 
       validateFields(); 
       if (fieldsValid) { 
        var subTotalSum = 0; 
        var vatSum = 0; 
        var totalSum = 0; 
        $('#field-po-items-values tbody tr:not(.content-multiple-removed-row)').each(function(){ 
         var quantityString = $(this).find('input[id*="' + QUANTITY_SUFFIX + '"]').val(); 
         var numericQuantity = decimalise(quantityString); 
         var priceString = $(this).find('input[id*="' + PRICE_SUFFIX + '"]').val(); 
         var numericPrice = decimalise(priceString); 
         var subtotal = parseFloat(numericPrice * numericQuantity); 
         $(this).find('input[id*="' + SUBTOTAL_SUFFIX + '"]').val(addCommas(decimalise(subtotal))); 
         var vat = subtotal * VAT; 
         $(this).find('input[id*="' + VAT_SUFFIX + '"]').val(addCommas(decimalise(vat))); 
         var total = subtotal + vat; 
         $(this).find('input[id*="' + TOTAL_SUFFIX + '"]').val(addCommas(decimalise(total))); 
         subTotalSum += subtotal; 
         vatSum += vat; 
         totalSum += parseFloat(total); 
        }); 
        $('input[id*="edit-field-po-subtotal"]').val(addCommas(decimalise(subTotalSum))); 
        $('input[id*="edit-field-po-vat"]').val(addCommas(decimalise(vatSum))); 
        $('input[id*="edit-field-po-total"]').val(addCommas(decimalise(totalSum))); 
       } 
      } 


     } 
    }; 
})(jQuery); 

约Drupal的行为更多信息: