You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue-multiselect多选组件选中值异常及AJAX提交JSON数据问题咨询

问题1解答

原因:你绑定的@select事件本身的设计回调参数不是全部已选中的数组,而是本次触发选中操作对应的单个元素(如果是选中整个分组则返回分组下的所有元素数组)。
当你首次选中单个子选项时,回调拿到的value是单个选项对象,对象本身没有length属性,所以value.length > 0判断不成立,queryData没有被赋值,所以控制台打印的是初始值。而v-model绑定的selectedcategoryitem是由组件内部维护的完整选中列表,已经同步更新了选中项,所以长度为1。
你多选或者选中分组的时候,返回的value是数组,所以判断成立,可以正常赋值。

问题2解答

第一步:修正事件绑定

不需要用@select事件,直接监听@input事件即可,@input事件的回调参数就是组件最新的完整选中列表,和selectedcategoryitem的值完全同步:

<multiselect 
  v-model="selectedcategoryitem"
  :options="options"
  :multiple="true"
  :internal-search="false"
  group-values="libs"
  group-label="category"
  :group-select="true"
  placeholder="Type to search"
  track-by="value"
  label="name"
  @input="toggleSelected"
>
  <span slot="noResult">Oops! No elements found. Consider changing the search query.</span>
</multiselect>

第二步:修正请求传参逻辑

直接用已经同步更新的selectedcategoryitem做序列化即可,不需要额外用queryData中转:

toggleSelected: function () {
  // 直接用v-model绑定的selectedcategoryitem,不需要依赖事件参数
  console.log(this.selectedcategoryitem);
  // 转JSON字符串传给后端
  const postData = JSON.stringify(this.selectedcategoryitem)
  this.UpdateType(this.selectGoalID, postData).then(
    function (result) {
      if (result.code == "S") {
        // 成功逻辑
      } else {
        alertResultModel(result);
      }
    },
    function () {
      alertError("Error!!");
    }
  );
}

另外注意你贴出的data代码有语法错误:options数组最后一个元素结尾多了一个多余的},需要先修正语法问题避免响应式异常。
如果后端需要的是纯值数组而非完整对象,可以遍历selectedcategoryitem提取需要的字段再序列化,比如只取value字段:

const postData = JSON.stringify(this.selectedcategoryitem.map(item => item.value))

内容的提问来源于stack exchange,提问作者Thomas Lin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 09:30:03