多个 select - deselect returns 的值 null

Multiple select - value of deselect returns null

描述

我正在使用一个 jquery 插件 chosen,它几乎可以做这样的事情:

这让我可以一一添加每个选项或一一删除每个选项。对于每个选定的选项,我创建一个新的 element,并将选定选项的 value 作为 id

问题

问题出在我从列表中删除一个选项时。例如:

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

如果添加了选项,return 是否会得到正确的 ,但是 returns null 如果我们删除一个选项。我需要能够获得被取消选择的选项的值,以便我可以在另一个 元素 .

中删除它

问题

如何将取消选择的选项的值设为 return 实际值而不是空值?还是有另一种方法可以绕过这个问题?

我需要做的就是找到取消选择的选项并将其从其他元素中删除(知道元素的 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');
      }
});

根据 change 事件描述中的 documentation,您有

Chosen triggers the standard DOM event whenever a selection is made (it also sends a selected or deselected parameter that tells you which option was changed).

这表明您应该观察事件处理程序在 运行 时接收到的参数,以获得关于 removed/deselected 选项的提示(并且很可能是参考)。

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 );
    }

});