多选 - 取消选择的值返回null

时间:2015-04-06 09:54:45

标签: javascript jquery multiple-select-query

描述

我正在使用jquery插件chosen,它几​​乎可以做到这样:

enter image description here

这允许我逐个添加每个选项或逐个删除每个选项。对于所选的每个选项,我使用所选选项的创建一个新的元素作为 id

问题

问题是当我从列表中删除选项时。例如:

$('#multiple-select').on('change', function(e){
  alert($(e.target).val());
});

如果添加了选项,将返回正确的,但如果我们删除选项,则返回 null 。我需要能够取消选择该选项的值,以便我可以在其他元素中删除它。

问题

如何获取取消选择的选项的值以返回实际值而不是null?或者有另一种方法可以绕过这个问题吗?

我需要做的就是找到取消选择的选项并将其从其他元素中删除(知道元素的id是基于选项的值构建的)。

更新

按要求删除代码:

$('body').on('change', benefs, function(e){
  var $nbparts = $(participantNbParts),
      $target = $(e.target),
      $val = $target.val(),
      $name = $target.text();

      if($val == null){
        //this is because we deleted something thus we need to remove it from $nbparts which is a pitty since we don't know what it was before it got deleted
      }else{
        //someone was added
        $(create_row_expense_nb_parts_participant($name, $val)).appendTo($nbparts).show('slow');
        $nbparts.parent().show('fast');
      }
});

2 个答案:

答案 0 :(得分:3)

jQuery chosen提供selecteddeselected分别用于识别选定和取消选择的值,例如:

$("#your_element_id").on('change', function (evt, params) {

    var selected = params.selected;
    var removed = params.deselected; //gives you the deselected value

    //assuming your option ids are numbers
    if( removed > 0 ) {
        console.log( "Value removed is:" + removed );
    }

});

答案 1 :(得分:1)

来自change事件描述中的documentation

  

每当做出选择时,Chosen会触发标准DOM事件   (它还会发送一个选定或取消选择的参数,告诉您哪个   选项已更改)。

这表明您应该在运行时观察事件处理程序收到的参数,以获取有关已删除/取消选择选项的提示(并且很可能是对其的引用)。