Javascript jQuery从添加的类调用函数以调用另一个函数

Javascript jQuery从添加的类调用函数以调用另一个函数,javascript,jquery,Javascript,Jquery,我正在使用一个多选插件来创建一个要选择的商品和服务列表。用户将从一个列表中选择他们想要的服务,因为有很多服务,所以他们是分组的。所以动态创建的内容看起来像 <ul class="ms-optgroup"> <li class="ms-optgroup-label"><span>Class 41</span></li> <li class="ms-elem-selectable"><span>Item 1&

我正在使用一个多选插件来创建一个要选择的商品和服务列表。用户将从一个列表中选择他们想要的服务,因为有很多服务,所以他们是分组的。所以动态创建的内容看起来像

<ul class="ms-optgroup">
  <li class="ms-optgroup-label"><span>Class 41</span></li>
  <li class="ms-elem-selectable"><span>Item 1</span></li>
  <li class="ms-elem-selectable"><span>Item 2</span></li>
  <li class="ms-elem-selectable"><span>Item 3</span></li>
  <li class="ms-elem-selectable"><span>Item 4</span></li>
</ul>
当用户单击某个项目时,它将转到右侧相邻的列表,所有这些都可以正常工作。然后,每点击一次,总价格就会增加350美元。但我想做一个情况,不管增加多少物品,它只会增加350美元一次

所以我试着这样做,当你点击一个项目时,它会像平常一样增加$350,然后向ms optgroup添加一个类

$(function () {
  addClass(350);
  addService(0);
});

function update() {
    var total = 0;
      $('.ms-selectable .ms-list .ms-optgroup:not(.added) .ms-elem-selectable input[type=hidden], .ms-selectable .ms-list .ms-optgroup.added .ms-elem-selectable input[type=hidden]').each(function () {
        total += +$(this).val();
      });

  $('#variablePrice').text(total);
}

function addClass(value) {
    const elem = $(".ms-selectable .ms-list .ms- optgroup:not(.added) .ms-elem-selectable");
    elem.on('click', function () {
        $(this).parent().addClass('added');
        $(this).append($('<input>').attr('type', 'hidden').val(value));

        update();
      });
}

<ul class="ms-optgroup added">
所以一切正常,但当我为ms-optgroup.added类中的特定项调用新函数时,它只返回相同的$350函数“addClass”

这是我的第二个函数,用于添加一个项目

function addService(value) {
    const elem = $(".ms-selectable .ms-list .ms-optgroup.added .ms-elem-selectable");

  elem.on('click', function () {
    $(this).append($('<input>').attr('type', 'hidden').val(value));

    update();
  });
}
因此,在我的脑海中,一旦选择了第一个项目并添加了$350,并且ms optgroup“添加”了类,之后调用的函数应该只为每次单击添加$0的值

我希望这是有意义的,我知道这是一个非常具体的问题。我已经试了一段时间来纠正这个错误

谢谢你的帮助


这是一把小提琴,以两组为例,理论上你可以从一组中添加一件物品,无论添加多少物品,每组都会增加350美元。因此,我尝试添加.added类以防止进一步计算。但我可能有点不对劲。

我会使用复选框,将价格存储到data-*属性中,然后使用Array.reduce计算:选中的值

让价格=350;//或者别的什么 const$service=$'[name=service[]]; const calcTotal==>{ const price_services=[…$service.filter':选中“.get] .reducev,el=>v+=+el.dataset.value,v,0; const result=price\u services?price\u services+价格:0; $'total'。文本`${result}$` } $service.on'change',calcTotal.trigger'change'; *{框大小:边框框;边距:0;} 标签{显示:块;} 一 a 10$ b 15$ c 8$ 二 d 120$ E100$ F7$ g 4$ h2$ i 64$ j 33$ 总数:
我们怎样才能让val和你的例子一起工作?请创建一个。在你的JS中做了什么?我会做一个小提琴,两个记号已经添加到原始的postAnd中,当值从正确的列表中删除时?。。比我真的很感激您为找到解决方案所做的努力,但不幸的是,我不得不在使用multi-select js提供的格式的约束下工作。