Javascript IE和Chrome执行knockoutjs与Firefox有什么不同?

Javascript IE和Chrome执行knockoutjs与Firefox有什么不同?,javascript,knockout.js,cross-browser,Javascript,Knockout.js,Cross Browser,我的模型是 var emailModel = function (email, isPreferred) { this.Email = ko.observable(email); this.IsPreferred = ko.observable(isPreferred); }; var vm = function () { var self = this; self.emails = ko.observableArray([new emailModel('',

我的模型是

var emailModel = function (email, isPreferred) {
    this.Email = ko.observable(email);
    this.IsPreferred = ko.observable(isPreferred);
};

var vm = function () {
    var self = this;
    self.emails = ko.observableArray([new emailModel('', false)]);
    self.addEmail = function () {
        self.emails.push(new emailModel('', false));
    };
    self.removeEmail = function (email) {
        self.emails.remove(email);
    };
    self.setPreferred = function (email) {
        if (email.IsPreferred()) {
            for (var i = 0; i < self.emails().length; i++) {
                if (self.emails()[i] != email)
                    self.emails()[i].IsPreferred(false);
            }
        }
    };
}
var emailModel=function(电子邮件,isPreferred){
this.Email=ko.observable(电子邮件);
此.IsPreferred=ko.可观察(IsPreferred);
};
var vm=函数(){
var self=这个;
self.emails=ko.observearray([new-emailModel('',false)]);
self.addEmail=函数(){
self.emails.push(新的emailModel(“”,false));
};
self.removeMail=函数(电子邮件){
self.email.remove(email);
};
self.setPreferred=函数(电子邮件){
if(email.IsPreferred()){
对于(var i=0;i
setPreferred在Firefox中正常工作,但在IE和Chrome中则不然。有人能解释一下吗

提琴来了


浏览器之间的区别在于绑定的更新顺序。只需添加1条调试行即可显示:

self.setPreferred = function (email) {
    console.log(email.IsPreferred())  <-- here
    if(email.IsPreferred()){
       ....
self.setPreferred=函数(电子邮件){

console.log(email.IsPreferred())多亏了这些答案和评论,我才明白这一点

在SET优先

self.setPreferred = function (email) {
    if (email.IsPreferred()) {
        for (var i = 0; i < self.emails().length; i++) {
            if (self.emails()[i] != email)
                self.emails()[i].IsPreferred(false);
        }
    }
};

你的小提琴似乎工作得很好。@Pointy设置首选项不像单选按钮那样工作。@Jamiec我无法说服我的客户…@xpluni你到底是什么意思?当我单击复选框时,任何其他已选中的复选框都会取消选中。@Pointy在chrome下对我不起作用。浏览器问题?这不应该被视为淘汰吗g?@Pointy-可能吧。这肯定是不一致的。
self.setPreferred = function (email, target) {
    if (target.target.checked) {
        for (var i = 0; i < self.emails().length; i++) {
            if (self.emails()[i] != email)
                self.emails()[i].IsPreferred(false);
        }
    }
};