0

我有一个复选框,需要在合法之前选中另一个复选框才能选择它。如果选中复选框是非法的,我想取消选中它。代码如下:

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 上找到

4

0 回答 0