ノックアウトjsと組み合わせてjquery検証を使用しようとしています。observableArray にバインドし、テンプレートでチェックボックスを使用しています。チェックボックスをオフにすると、項目が observableArray から削除されます。これが発生した後、「Uncaught TypeError: Cannot read property 'nodeName' of null」という jquery 検証からの例外が発生します。この例外を確認するには、chrome 開発者ツールを使用して監視できます。
ここに私のコードの jsfiddle があります: http://jsfiddle.net/dgHS3/28/
ここにhtmlがあります
<form id="myForm">
<table>
<thead>
<tr>
<th>Use</th>
<th>Caption</th>
</tr>
</thead>
<tbody data-bind="foreach: selectedFields">
<tr >
<td><input type="checkbox" data-bind="checked: IsSelected, uniqueName: true, click: $root.addRemoveField" /></td>
<td><input class="required" data-bind="value: Caption, enable: IsSelected, uniqueName: true" /></td>
</tr>
</tbody>
これがJavaScriptです:
function FieldData(data) {
var self = this;
self.Caption = ko.observable(data.Caption);
self.IsSelected = ko.observable(data.IsSelected);
}
function myViewModel() {
var self = this;
self.selectedFields = ko.observableArray([]);
init = function () {
var data = new Object();
data.Caption = "cap1";
data.IsSelected = true;
var flds = [];
var fld = new FieldData(data);
flds.push(fld);
self.selectedFields(flds);
}();
self.addRemoveField = function (field) {
if (field.IsSelected()) {
self.selectedFields.push(field);
}
else {
self.selectedFields.remove(field);
}
return true;
};
}
var vm = new myViewModel();
ko.applyBindings(vm);