为什么复选框在取消选中时不在onchange上提交任何数据

时间:2016-04-15 13:15:23

标签: javascript jquery python ajax web2py

使用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');
        }
    });
});

1 个答案:

答案 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]}>

This post pointed to the solution