我有一个复选框,需要在合法选择之前选中另一个复选框。如果选中该复选框是非法的,我想取消选中它。代码如下:
if (self.Advances()[i].Bought()) {
break;
} else {
advance.Bying(false);
$("#" + advance.Id).checkboxradio('refresh');
return;
}
检查敲除对象和DOM时,当上面的其他命中时,正确地不设置值和复选框。然而,GFX并没有过时,因此仍然可以检查复选框。
经过实验后我发现在刷新行中引入javascript错误实际上导致一切按预期工作(这是意料之外的)IE以下工作:
if (self.Advances()[i].Bought()) {
break;
} else {
advance.Bying(false);
//parent is not a check box, so error is thrown.
$("#" + advance.Id).parent().checkboxradio('refresh');
return;
}
这让我相信JQM是以错误的顺序触发的(IE是我在上面手动执行的刷新是在鼠标事件刷新之前触发的)
所以我使用setTimeout结束了以下(工作但不优雅)的解决方案:
if (self.Advances()[i].Bought()) {
break;
} else {
setTimeout(function () {
advance.Bying(false);
$("#" + advance.Id).checkboxradio('refresh');
}, 250);
return;
}
我的问题是,无论如何我可以强制JQM以正确的顺序刷新?或者这是JQM中的错误还是我不了解JQM如何工作?
编辑:整个代码(和网站)可以在civ.testmaskin.com上找到