我有一个复选框,需要在合法之前选中另一个复选框才能选择它。如果选中复选框是非法的,我想取消选中它。代码如下:
if (self.Advances()[i].Bought()) {
break;
} else {
advance.Bying(false);
$("#" + advance.Id).checkboxradio('refresh');
return;
}
当上面的 else 命中时,检查敲除对象和 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 是按错误的顺序触发的(即我在上面手动执行的刷新是在鼠标事件刷新之前触发的)
所以我最终使用 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 上找到