多次选择在每次提交后取消选择最后一项

时间:2017-12-01 00:44:06

标签: javascript php ajax multi-select bootstrap-multiselect

每次$_POST提交后,多选减少,但返回所有ajax响应索引。在这种形式中,我有一个触发 Empresa 更改的事件,它会加载所有其他字段并标记ajax返回的php会话中的选项。

每次提交后,我都会有所有会话项目,但每个字段上的最后一项都被取消选择。

// This code triggers an action in Empresa ...
$(function($) {$('.dropdown-toggle').dropdown('toggle');});

$.ajax({
    url: '/ajaxrequests/requestservicos',
    type: 'POST', dataType: 'json',
    data: {empresas:empresas},
    success: function(retorno){
        var servs = retorno.servicos; // [10, 12, 14, 20, 21, 23, 25, 29, 32, 33, 38]
        var checks = retorno.check; // [10, 12, 14, 20, 21, 23, 25]
        console.log(retorno);
        $('#ajax_servico').html("");
        $.each(servs, function(valor, chave){
            $('#ajax_servico').append($('<option>', {
                value: valor,
                text : chave,
                checked: checks[valor],
                selected: checks[valor]
            }));
        });
        $("#ajax_servico").multiselect('destroy');
        MultiselectSet($("#ajax_servico"));
    }
});         

function MultiselectSet(input){
    $(input).multiselect({
        includeSelectAllOption: true,
        nSelectedText: 'selecionados ..',
        nonSelectedText:'Nenhum selecionado ..',
        allSelectedText: 'Todos selecionados ..',
        selectAllText: 'Selecionar todos ..',
        numberDisplayed: 1,
    });
}

enter image description here enter image description here

1 个答案:

答案 0 :(得分:1)

不确定你想在这里做什么,但如果你想要选择支票中的所有物品,你可以试试这个:

$.ajax({
  url: '/ajaxrequests/requestservicos',
  type: 'POST', dataType: 'json',
  data: {empresas:empresas},
})
.then(
  function(retorno){
    const servs = retorno.servicos, // [10, 12, 14, 20, 21, 23, 25, 29, 32, 33, 38]
    checks = retorno.check, // [10, 12, 14, 20, 21, 23, 25]
    $servico = $('#ajax_servico');
    console.log(retorno);
    $servico.html("");
    servs.forEach(function(chave,index){
      const isInChecks = checks.indexOf(chave)!==-1;
      $servico.append($('<option>', {
        value: index,
        text : chave,
        checked: isInChecks,
        selected: isInChecks
      }));      
    });
    $("#ajax_servico").multiselect('destroy');
    MultiselectSet($("#ajax_servico"));
  }
  ,function(reject){console.error("something went wrong:",reject)}
);

我不确定为什么要将选项的值设置为数组的索引,将它设置为数据库中项目的id是不是更好?你将选项的文本设置为一个数字,是id吗?如果是这样,您应该将值设置为id,将文本设置为表示数据库中该id的文本值。

相关问题