使用Web2Py我构建了一些复选框,它们看起来都与此类似:
<input type="checkbox" value="some_value" onchange="ajax('/app/controller/function/args', ['the_name'])" name="the_name" id="some_id" class="boolean">
他们应该在变革中提交他们的价值。当我print request.vars
时:
<Storage {'the_name': some_value}>
但仅限于检查或激活它们时。
另一方面,当取消选中或取消激活时,ajax调用已完成,但未提交任何数据。再次print request.vars
:
<Storage {}>
为什么这只是单程&#39;?
修改
使用默认值value="on"
时,行为保持不变。要指定我正在做什么:我有一些隐藏的检查点,可以通过按钮点击进行选中/取消选中。如果未隐藏复选框并直接单击,则行为不会更改 - 在激活时提交数据,而不是在停用时提交任何数据。
这是我使用的JS。
$(function() {
return $('.btn-trigger').click(function() {
var btn, checkbox;
btn = $(this);
checkbox = btn.next();
if (checkbox.attr('checked')) {
checkbox.val('false');
checkbox.removeAttr('checked').prop('checked', false);
checkbox.trigger('change');
return btn.removeClass('btn-success').addClass('btn-danger');
} else {
checkbox.val('true');
checkbox.attr('checked', 'checked').prop('checked', true);
checkbox.trigger('change');
return btn.removeClass('btn-danger').addClass('btn-success');
}
});
});
答案 0 :(得分:1)
此问题的解决方案是沿复选框传递隐藏的输入字段。复选框和隐藏字段都必须共享相同的名称:
<input type="checkbox" value="some_value" onchange="ajax('/app/controller/function/args', ['the_name'])" name="the_name" id="some_id" class="boolean">
<input type="hidden" name="the_name value="some_value">
现在,如果取消选中该复选框(未选中),则会传递隐藏字段中的值:
<Storage {'the_name': some_value}>
激活两个字段中的值的传递:
<Storage {'the_name': [some_value, some_value]}>