【发布时间】:2011-05-08 00:48:50
【问题描述】:
我正在创建基于 ajax 的应用程序。现在我正在使用客户端javascript。我创建了根据应用程序逻辑正常工作的控制器,但是我在更新包含复选框的视图时遇到了问题。 这是我正在做的简短示例:
<script type='text/javascript'>
var model = { 'chk1': true, 'chk2': false, 'chk3': false };
var Controller = {
'processCheck': function(chk, value) {
model[chk] = value;
if (chk == 'chk2')
model.chk2 = true;
if (chk == 'chk3' && value)
model.chk1 = false;
if (chk == 'chk1' && model.chk3)
model.chk1 = false;
Controller.updateView();
},
'updateView': function() {
$('#chk1').attr('checked', model.chk1);
$('#chk2').attr('checked', model.chk2);
$('#chk3').attr('checked', model.chk3);
}
}
</script>
<input id='chk1' type="checkbox" onclick="Controller.processCheck('chk1', $('#chk1').attr('checked')); return false;" />
<input id='chk2' type="checkbox" onclick="Controller.processCheck('chk2', $('#chk2').attr('checked')); return false;" />
<input id='chk3' type="checkbox" onclick="Controller.processCheck('chk3', $('#chk3').attr('checked')); return false;" />
所以逻辑非常简化。 当我们单击复选框时会出现问题。它们更新不正确。 但是如果我用适当的参数调用控制器方法,然后检查模型,一切似乎都是正确的。 所以问题在于复选框中的点击事件。 我对输入字段和下拉菜单没有任何问题。
【问题讨论】:
-
我知道如何选中和取消选中复选框。这是其他问题。实际上我正在使用 $('#id').attr('checked', true);和 $('#id').attr('checked', false);
-
为什么“返回false;”在你的点击?点击没有被任何东西调用,因此没有返回值。
-
我返回 false 以防止默认行为;我不希望通过单击更新复选框。我希望它们只调用控制器方法,然后控制器更新其中的一些方法。
-
您能否确认第一次单击复选框 2 时的预期行为?
标签: javascript jquery model-view-controller checkbox click