使用Knockout更改单选按钮时设置复选框

时间:2013-10-25 12:59:48

标签: javascript jquery html checkbox knockout.js

我是淘汰赛的新手,到目前为止我遇到了一个问题。我花了整整一天时间没有这么进展。

我有4个单选按钮绑定到名为InvType的可观察对象:

<input type="radio" id="rdoAIP" name="rdoAIP" value="AIP" data-bind="checked: InvType" />AIP&nbsp;&nbsp;
<input type="radio" id="rdoPSI" name="rdoPSI" value="PSI" data-bind="checked: InvType" />PSI&nbsp;&nbsp;
<input type="radio" id="rdoPSIAIP" name="rdoPSIAIP" value="PSIAIP" data-bind="checked: InvType" />PSI/AIP&nbsp;&nbsp;
<input type="radio" id="rdoShortForm" name="rdoShortForm" value="PSIShortForm" data-bind="checked: InvType" />PSI Short Form 

我有几个复选框,只有在选中特定单选按钮时才能检查:

<input data-bind="checked: OptionalValue1" id="chk1" type="checkbox" /> Checkbox 1<br/>
<input data-bind="checked: OptionalValue2" id="chk2" type="checkbox" /> Checkbox 2<br/>
<input data-bind="checked: OptionalValue2" id="chk3" type="checkbox" /> Checkbox 3<br/>

当用户单击其他单选按钮时,也应检查不同的复选框组合。例如,如果在初始页面加载时选中“AIP”单选按钮,则还应检查前2个复选框。但是当用户点击“PSI”单选按钮时,我只想要检查第一个复选框,而不选中其他复选框。

编辑: 对不起,但我不清楚复选框。以下是条件:

  1. 在初始页面加载时,单选按钮被设置,这会导致复选框相应地更新。每个不同的无线电值会导致复选框的不同组合被选中和取消选中。

  2. 页面加载后,用户可以单击单个复选框并更改其值。这不会影响任何其他复选框或单选按钮。

  3. 到目前为止我的淘汰代码:

    <script type="text/javascript">
    var psiInvestigationViewModel = @Html.Raw(New JavaScriptSerializer().Serialize(Model));
    
        function PSIInvestigationViewModel(data) 
        {
            var self = this;
            InvestigationType : ko.observable();
    
            ko.mapping.fromJS(data, {}, self);
    
        };
    
    $(function () 
    {
        ko.applyBindings(new PSIInvestigationViewModel(psiInvestigationViewModel), $('#PSIInvestigation@(ViewData("UniqueID"))')[0]);
    
    });
    

    如果有人可以根据单选按钮的变化向我显示让我的复选框更新所需的代码,那么我将不胜感激。

    由于

2 个答案:

答案 0 :(得分:1)

首先,所有单选按钮应该相同,所以如果你选择一个,另一个将被取消选择。

如果复选框不是只读,则可以在init函数中编写选择逻辑。 将在每个单选按钮更改时调用此init函数:

var VM = function () {
    var self = this;
    self.InvType = ko.observable();
    var initState = function () {
        var t = self.InvType();
        self.OptionalValue1(t == 'AIP' || t == 'PSIAIP');
        self.OptionalValue2(t == 'PSI' || t == 'PSIAIP');
        self.OptionalValue3(t == 'PSIAIP');
    };

    self.OptionalValue1 = ko.observable();
    self.OptionalValue2 = ko.observable();
    self.OptionalValue3 = ko.observable();
    self.InvType.subscribe(initState);
}

ko.applyBindings(new VM());

See fiddle

我希望它有所帮助。

答案 1 :(得分:0)

另一种方法是使用计算的observables:

self.Optionalvalue1 = ko.computed(function() {
  return self.InvType() == 'AIP' || self.InvType() =='PSIAIP';
)};

等等。