javascript 根据单选按钮选项排序到数组中,得到混合结果

k4emjkb1  于 2022-12-10  发布在  Java
关注(0)|答案(1)|浏览(99)

bounty将在7天后过期。回答此问题可获得+100声望奖励。Freddy希望吸引更多人关注此问题。

我有两个radio按钮组:
1.对于attendance,且具有“是”和“否”值
1.对于dietary选择,其值为“素食者/纯素食者”和“非素食者”
dietary的字段仅在用户为出勤选择“是”时显示。
我把那些接受、拒绝、选择蔬菜或非蔬菜的人分类到他们自己的数组中(所以有4个数组)。这4个数组的值被传递到一个隐藏字段,然后发布到DB。
我已经成功地将接受或拒绝的人排序到了他们自己的数组中。但是,由于我添加了另一个change函数来对饮食选项进行排序,所以我得到了混合的结果。在演示中重新创建的步骤:
1.对于“John”,单击“是”表示出席
1.将John添加到attending list(控制台日志)
1.对于“John”,点击“非素食”
1.将John添加到non veg list
1.对于Alex,单击“是”进行出勤

  1. Alex与John一起添加到attending list
    1.对于Alex,点击“素食主义者/纯素食主义者”
    1.亚历克斯被添加到“蔬菜名单”,但约翰被从“非蔬菜名单”中删除
    此外,如果用户最初点击yes来出席,然后选择diet选项,然后点击“no”来出席,他们的名字应该从diet数组中删除(因为他们没有出席)。
    演示如下:
    第一个

也尝试过

diet_radio.on('change', function() {
    var $this = $(this);
    var name = $this.data("name");
    var checkedVal = $this.val();

    // only add to diet arrays if user is attending
    if ( $(this).closest(".guest").find(".input-radio-attendance:checked").val() == "yes" ) {
      if (checkedVal == "veg") {
        veg_array.push(name);
        nonveg_array.splice($.inArray(name, nonveg_array), 1);
      } else {
        nonveg_array.push(name);
        veg_array.splice($.inArray(name, veg_array), 1);
      }
    }

    // if user selects yes to attendance, then selects a diet option, then changes atendance to no, remove them from diet arrays
    if( accepted_list.includes(name) ){
      veg_array.splice( $.inArray(name, veg_array), 1 );
      nonveg_array.splice( $.inArray(name, nonveg_array), 1 );
    }

    var veg_list = veg_array.join(",");
    var nonveg_list = nonveg_array.join(",");

    veg_field.val(veg_list);
    nonveg_field.val(nonveg_list);

    console.log("veg list: " + veg_list);
    console.log("non veg list: " + nonveg_list);

  });

编辑@拉约什·阿帕德

cidc1ykv

cidc1ykv1#

您可以在加入阵列之前简单地执行sort()操作:
第一个
编辑:应用了两个修复:
1.如果勾选了“不参加”,我会取消勾选“蔬菜/非蔬菜”单选框
1.如果勾选了“不参加”,我会从“蔬菜/非蔬菜”中删除该名称

相关问题