Knockout.js 比较并验证两个下拉列表中的选定值

Knockout.js 比较并验证两个下拉列表中的选定值,knockout.js,knockout-validation,Knockout.js,Knockout Validation,我想验证下拉列表中的选定项是否未在其他下拉列表中选定 我创建了一个小提琴来尝试,但它不起作用: ko.validation.configure({ decorateElement: true, registerExtenders: true, messagesOnModified: true, insertMessages: false, parseInputAttributes: true, messageTemplate: null });

我想验证下拉列表中的选定项是否未在其他下拉列表中选定

我创建了一个小提琴来尝试,但它不起作用:

ko.validation.configure({
    decorateElement: true,
    registerExtenders: true,
    messagesOnModified: true,
    insertMessages: false,
    parseInputAttributes: true,
    messageTemplate: null
});

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

    self.databases = ko.observableArray([{
        Name: "DB1",
        Id: 1
    }, {
        Name: "DB3",
        Id: 3
    }]);

    self.databases2 = ko.observableArray([{
        Name: "DB3",
        Id: 3
    }, {
        Name: "DB4",
        Id: 4
    }]);

    self.selectedDatabase = ko.observable();
    self.selectedDatabase2 = ko.observable();

/*  self.selectedDatabase = ko.observable().extend({
        validation: {
            validator: notEqual,
            params: self.selectedDatabase2
        }
    });

    self.selectedDatabase2 = ko.observable().extend({
        validation: {
            validator: notEqual,
            params: self.selectedDatabase2
        }
    });

    var notEqual = function (val, other) {
        return val =! other();
    };
    */

    ViewModel.errors = ko.validation.group(self);

    return self;
};

ko.applyBindings(new ViewModel());
我已经更新了您的

您必须将以下代码上移,以便在分配任务时可用

var notEqual = function (val, other) {
    console.log(other());
    return val =! other();
};
另一件事是,您将self.selectedDatabase2 2次分配给validations的params属性


祝您好运

即使未选择相同的项目,第二个下拉列表也会变为红色:(