【问题标题】:Why checkbox not submitting any data at onchange when being unchecked为什么复选框在未选中时未在 onchange 提交任何数据
【发布时间】:2016-04-17 19:53:32
【问题描述】:

使用 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 {}>

为什么这只能“单向”工作?

编辑:

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

【问题讨论】:

    标签: javascript jquery python ajax web2py


    【解决方案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.

    【讨论】:

      猜你喜欢
      • 2016-12-22
      • 1970-01-01
      • 1970-01-01
      • 2014-06-26
      • 2013-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-30
      相关资源
      最近更新 更多