淘汰:根据下拉值更改输入值

时间:2015-10-28 00:40:53

标签: knockout.js

我有一个下拉菜单,允许一个人选择定价选项,其中一个是“折扣”。如果选择“折扣”,我需要成本字段成为负值。这很容易实现。

我的问题是:在键入正值后,如何通过检测定价选项下拉是否为“折扣”,如何使成本字段为负数。下面是我的模型的简化版本以及我在逻辑上将数字转换为负数(如果下拉列表更改)。

var row = function (pricing, c) {
 var self = this;
 self.cost = ko.observable(c ? c : "0").extend({ required: true });
 self.pricingOptions = ko.observableArray([
  { id: "1", value: "Freight" },
  { id: "2", value: "Discount" }
 ]);
 self.selectedPricing = ko.observable(pricing ? pricing : "");
 self.selectedPricing.subscribe(function (value) {
  if (value == "Discount") 
   {
    if (parseFloat(self.cost()) > 0) {
    self.cost(-parseFloat(self.cost()));
   }
  } else {
   if (parseFloat(self.cost()) < 0) {
    self.cost(-parseFloat(self.cost()));
   }
  }
 });
}

编辑:这是我所拥有的jsfiddle:http://jsfiddle.net/tt1mtb19/3/

请注意,如果已经选择了折扣,当您在字段中输入金额时,无论如何都会保持正数。如果您将下拉菜单更改回运费,然后更改为折扣,则只会更改为负数。

1 个答案:

答案 0 :(得分:1)

您需要做的只是正确乘以最高负整数,即-1,最重要的是使用blur事件。

<强>视图模型:

var ViewModel = function (pricing, c) {
    var self = this;
    self.cost = ko.observable(c ? c : 0);
    self.selectedPricing = ko.observable(pricing ? pricing : "");
    self.pricingOptions = ko.observableArray([{
        id: "1",
        value: "Freight"
    }, {
        id: "2",
        value: "Discount"
    }]);
    self.selectedPricing.subscribe(function (value) {
        switch (value) {
            case "1":
                self.cost(parseFloat(self.cost()));
                break;
            case "2":
                self.cost(-1 * parseFloat(self.cost()));
                break;
            default:
                break;
        }
    });
    self.modify = function () {
        if (self.selectedPricing() == 2 && self.cost() > 0) {
            self.cost(-1 * parseFloat(self.cost()));
        }
    }
}

ko.applyBindings(new ViewModel(0, 2));

示例工作小提琴 here