jQuery敲除单选按钮的动态数组,值必须是布尔值

jQuery敲除单选按钮的动态数组,值必须是布尔值,jquery,asp.net-mvc-4,knockout.js,radio-button,Jquery,Asp.net Mvc 4,Knockout.js,Radio Button,完全被这件事缠住了。仔细阅读,但令人难以置信的是,找不到任何其他可能有两个以上单选按钮要求其值为布尔值的人 给定如下所示的视图:- 相应的淘汰视图模型:- function driver(name, license, maindriver) { var self = this; self.DriverName = ko.observable(name); self.License = ko.observable(license); self.IsMainDriver = ko.observa

完全被这件事缠住了。仔细阅读,但令人难以置信的是,找不到任何其他可能有两个以上单选按钮要求其值为布尔值的人

给定如下所示的视图:-

相应的淘汰视图模型:-

function driver(name, license, maindriver) {
var self = this;

self.DriverName = ko.observable(name);
self.License = ko.observable(license);
self.IsMainDriver = ko.observable(maindriver);

}
我有各种各样的麻烦,让这些张贴一个实际的布尔值为'IsMainDriver'。选择其中的哪一个必须设置为true。其他值必须设置为false。我尝试过对下面的html进行各种调整,但都没有成功。有些帖子说真/假被设置为字符串,例如“真”或“假”。我已经尝试过剔除可观察的扩展器和回调,但正如我所说的,到目前为止没有任何效果。有时我在firebug中得到的“on”对“IsMainDriver”无效。到目前为止,我所做的最大努力是使用一个自定义绑定,其中唯一的问题是,一旦“IsMainDriver”被设置为true,“IsMainDriver”observeable就再也没有被设置为false,因此基本上,尽管视图中只有一个“checked”,但在发布时,多行的“IsMainDriver”被设置为true(希望这是有意义的)。任何帮助都将不胜感激

<td>
  <input name="mainDriverGroup[]" type="radio" data-bind="checked: IsMainDriver, value:IsMainDriver()" class="required" data-val-required="Please choose the main driver." />
  <span class="field-validation-valid" data-valmsg-for="mainDriverGroup[]" data-val-replace="true"></span>
 </td>

我已经为这个问题建立了基础

因为您只有一个单选按钮,所以我创建了computed observable,将布尔值转换为敲除和返回的适当值

    this.IsMainDriverFormatted = ko.computed({
    read: function () {
        if (self.IsMainDriver() === true) {
            return 'on';
        }
        else {
            return 'off';
        }
    },
    write: function (value) {
        if (value === 'on') {
            self.IsMainDriver(true);
        }
        else {
            self.IsMainDriver(false);
        }
    },
    owner: this
    });
在视图中,使用了“已检查”绑定

<input name="IsMainDriver" type="radio" data-bind="checked: IsMainDriverFormatted" />


Add with the problem好主意,很抱歉忘记了JSFIDLE。我认为这是一个很好的例子。谢谢。嗨,谢谢你,我是JSFIDLE的新手,但每次我运行它时,我都会看到“Sam Fernandes”,检查其他一个驱动程序似乎对我不起作用。不过,我使用了您的计算函数并修改了上面的小提琴,但仍然无法工作:(您需要将计算的可观测IsMainDriver格式化,而不是IsMainDriver:。另外,正如我从您的帖子中了解到的,您希望只选择一个驱动程序。我说的对吗?这几乎是正确的,假设有三个驱动程序,其中只有一个可以作为主驱动程序。因此,当这被发布回我的控制器时,我会有类似的“driver1 IsMainDriver=true”、“driver2 IsMainDriver=false”、“driver3 IsMainDriver=false”等…更新了我的检查绑定。如果我第一次没有正确解释自己,很抱歉。谢谢。为了实现这一点,您可以使用以下逻辑//订阅可观测IsMainDriver.ko.utils.arrayForEach(self.drivers(),function(item)的更改{item.IsMainDriver.subscribe(函数(newValue){if(newValue==true){//遍历数组.ko.utils.arrayForEach(self.drivers(),函数(driver){if(driver.DriverName()!==item.DriverName()){driver.IsMainDriver(false)}}}}}}}}};;更多细节请看我的小提琴。