【问题标题】:Knockout: change value of input dependent on drop down value淘汰赛:根据下拉值更改输入值
【发布时间】:2016-01-27 15:11:07
【问题描述】:

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

我的问题是:在输入正值后,如何通过检测定价选项下拉菜单是否在“折扣”上来使成本字段为负。下面是我的模型的简化版本,如果下拉更改,我有什么逻辑将数字变为负数。

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/

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

【问题讨论】:

  • 你能用self.discount = ko.computed(function(){return self.cost() * -1})这样的东西吗
  • @dan 我已经在这样做了,那不是我的问题。

标签: knockout.js


【解决方案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

【讨论】:

  • 我已经知道如何在选择“折扣”后将文本字段的值更改为负数。我遇到的问题是,在之前已经选择了“折扣”之后,只需输入一个正值,我如何才能更改文本字段的值。在您的示例中,将下拉菜单设置为“折扣”,然后在字段中输入 1。从字段中移除焦点后,它保持在 1。如果已经选择了“折扣”,我需要它自动更改为 -1。
  • 确定。您所需要的只是一个blur 事件,它可以有条件地检查更新@luthan
  • 啊,是的!我没想过使用模糊。不知何故,我希望通过扩展器来实现这一点,但这只会使事情复杂化。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2012-11-07
  • 1970-01-01
  • 2015-10-17
  • 2015-11-05
  • 2014-10-07
  • 2015-08-15
  • 1970-01-01
  • 2018-03-30
相关资源
最近更新 更多