0

我得到了下面的代码,我有问题。除了第一个实例之外,我无法计算任何“Labouritems”实例的“总”数量,之后的每个实例我都无法计算。

var LabourItems = {
   rate: null,
   hours: null,
   total: null,
   init: function(object) {
      this.rate = parseInt($(object).children('.rate').first().val(), 10);
      // var rate = $(object).children('.rate').first();
      this.hours =parseInt($(object).children('.hours').first().val(), 10);
      this.total = this.rate * this.hours;
      this.updateTotal(object);
   },
   updateTotal: function(object) {
      $(object).children('.total').first().val(this.total || 0);
   }
}

//reactTochange for those inputs that you want to observe
$('.labouritems input').on("keyup", function() {
   $('.labouritems').each( function(key,value){
      LabourItems.init(this);
   });
});
4

2 回答 2

1

这很简单:您不创建任何 'Labouritems' 实例,您只有一个Labouritems对象。

于 2012-10-20T22:06:25.957 回答
1

您的代码中没有任何“实例”,因为您从不调用new.

要允许LabourItems将其视为对象,请将其声明为:

function LabourItems(object) {
     return {
         rate: null,
         ...
     }
});

然后new LabourItems(this)在您的事件处理程序中使用。

或者(更有效,因为每个实例将共享方法的副本,而不是包含自己的副本)使用普通的原型声明:

function LabourItems(object) {
     this.rate = null,
     ...
};

LabourItems.prototype.init = function() {
    ...
};

LabourItems.prototype.updateTotal = function() {
    ...
};

new LabourItems(this)如上使用。

于 2012-10-20T22:06:37.973 回答