通过击倒切换radiobutton

时间:2017-08-22 15:13:21

标签: asp.net-mvc knockout.js

我在mvc中创建了大约4个单独的radiobutton:

using (var img = new MagickImage("image.jpg"))
{
    // -fuzz XX%
    img.ColorFuzz = new Percentage(10);
    // -transparent white
    img.Transparent(MagickColors.White);
    img.Write("image.png");
}

Radio 3& 4取决于收音机1& 2。

如果有人选择无线电1,则默认选择无线电3,禁用无线电4进行选择。 如果有人选择无线电2,他们可以选择无线电3或无线电4。

第一次默认选择是2号和4号无线电。

我可以通过jquery做到这一点,但不知道如何通过淘汰赛处理这个问题。

请输入任何内容?

1 个答案:

答案 0 :(得分:1)

你需要做一些事情。您需要在每个单选按钮的视图模型中使用专用的缺陷observable,并为视图模型中的每个相关单选按钮单击事件创建一个函数,然后将规则放在这些函数中。此外,您还需要rad4上的observable来启用/禁用它。然后,对于每个data_bind属性,添加事件绑定以处理这些单击事件。

您最终的结果视图模型应该如下所示:

var myViewModel = function() {
    var self = this;

    self.rad1IsChecked = ko.observable();
    self.rad2IsChecked = ko.observable();
    self.rad3IsChecked = ko.observable();
    self.rad4IsChecked = ko.observable();

    self.rad4IsEnabled = ko.observable();

    self.rad1OnClick = function() {
        //Put whatever rules in here that you need, like this...
        if (self.rad1IsChecked()) {
            self.rad3IsChecked(true);
            self.rad4IsEnabled(false);
        }

        return true; //Need this to propagate click event, so that button works as usual.
    }

    self.rad2OnClick = function() {
        //Put whatever rules in here that you need, like this...
        if (self.rad2IsChecked()) {
            self.rad3IsChecked(false);
            self.rad4IsEnabled(true);
        }

        return true; //Need this to propagate click event, so that button works as usual.
    }
}

你的每个HTML data_bind都应该是这样的:

data_bind = "checked: rad1IsChecked, event: {click: rad1OnClick}"
data_bind = "checked: rad2IsChecked, event: {click: rad2OnClick}"
data_bind = "checked: rad3IsChecked"
data_bind = "checked: rad4IsChecked, enable: rad4IsEnabled"

此外,您可能必须在data_bind前放置一个@,如“@data_bind”。这就是我过去的做法,但我不确定MVC是否需要它。