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

Select2无法显示选中配件值问题求助(Laravel AJAX场景)

问题描述

我通过Laravel API发起AJAX请求,根据选中的船只加载对应包含分类、子分类的配件选项,但Select2组件无法显示选中的配件值,也无法保存选中的配件。请排查问题以实现正常的选中功能。

前端JavaScript代码

$(document).ready(function () {
  // Initialize Select2 for accessory_discount class
  $(".accessory_discount").select2();

  var selectedAccessoryIds = []; // Array to store selected accessory IDs

  $("#boat-select").change(function () {
    var selectedBoats = $(this).val();
    var $accessorySelect = $("#accessory-select");

    // Clear the existing options and selected accessory IDs
    $accessorySelect.empty();
    $accessorySelect.append('<option value="">Select an accessory</option>');
    selectedAccessoryIds = [];

    if (selectedBoats.length > 0) {
      console.log("Selected Boats: ", selectedBoats);

      $.ajax({
        url: route("custom-boat-discounts.get-accessories"),
        type: "POST",
        data: { boats: selectedBoats },
        success: function (response) {
          console.log("Response: ", response);

          if (response.success) {
            var data = [];

            $.each(response.accessories, function (index, boat_cat) {
              var catGroup = {
                text: boat_cat.ltitle,
                children: [],
              };

              $.each(boat_cat.sub_categories, function (index, boat_sub_cat) {
                var subCatGroup = {
                  text: boat_sub_cat.ltitle,
                  children: [],
                };

                $.each(
                  boat_sub_cat.sub_sub_categories,
                  function (index, boat_sub_sub_cat) {
                    subCatGroup.children.push({
                      id: boat_sub_sub_cat.id,
                      text: boat_sub_sub_cat.ltitle,
                      cat: boat_cat.ltitle,
                      subCat: boat_sub_cat.ltitle,
                    });
                  }
                );

                catGroup.children.push(subCatGroup);
              });

              data.push(catGroup);
            });

            // Initialize Select2 with the new data
            $accessorySelect.select2({
              data: data,
              templateResult: formatAccessory,
              templateSelection: formatAccessorySelection,
              allowClear: true,
              multiple: false, // Allow single selection
            });

            // Trigger change event to update Select2 with new data
            $accessorySelect.trigger("change");

            // Add event listener for select and unselect events
            $accessorySelect.on(
              "select2:select select2:unselect",
              function (e) {
                selectedAccessoryIds = $(this).val() || [];
                console.log("Selected Accessory IDs:", selectedAccessoryIds);

                // Update hidden input field with selected IDs
                $("#selected-accessory-ids").val(
                  JSON.stringify(selectedAccessoryIds)
                );
              }
            );
          } else {
            console.error("Response success is false: " + response.message);
          }
        },
        error: function (xhr, status, error) {
          console.error("AJAX Error: ", status, error);
        },
      });

      function formatAccessory(accessory) {
        if (!accessory.id) {
          var $accessory = $("<span>" + accessory.text + "</span>");
          if (
            accessory.element &&
            $(accessory.element).parent().is("optgroup")
          ) {
            $accessory.addClass("ml-2");
          }
          return $accessory;
        }
        return $("<span>" + accessory.text + "</span>");
      }

      function formatAccessorySelection(accessory) {
        if (!accessory.id) {
          return accessory.text;
        }
        return (
          accessory.cat + " - " + accessory.subCat + " - " + accessory.text
        );
      }
    }
  });
});

后端Laravel代码

public function getAccessories(Request $request)
{
    $boatIds = $request->input('boats', []);

    if (empty($boatIds)) {
        return response()->json(['success' => false, 'message' => 'No boats selected.']);
    }

    $accessories = [];
    foreach ($boatIds as $boatId) {
        $boat = $this->predefinedListRepository->findById($boatId);

        if (!$boat) {
            return response()->json(['success' => false, 'message' => "Boat with ID $boatId not found."]);
        }

        $boat_cats = $boat->childitems_display();

        foreach ($boat_cats as $boat_cat) {
            $boat_cat_data = [
                'id' => $boat_cat->id,
                'ltitle' => $boat_cat->ltitle,
                'sub_categories' => []
            ];
        
            foreach ($boat_cat->childitems() as $boat_sub_cat) {
                $boat_sub_cat_data = [
                    'id' => $boat_sub_cat->id,
                    'ltitle' => $boat_sub_cat->ltitle,
                    'sub_sub_categories' => []
                ];
        
                foreach ($boat_sub_cat->childitems() as $boat_sub_sub_cat) {
                    $boat_sub_sub_cat_data = [
                        'id' => $boat_sub_sub_cat->id,
                        'ltitle' => $boat_sub_sub_cat->ltitle,
                    ];
        
                    $boat_sub_cat_data['sub_sub_categories'][] = $boat_sub_sub_cat_data;
                }
        
                $boat_cat_data['sub_categories'][] = $boat_sub_cat_data;
            }
        
            $accessories[] = $boat_cat_data;
        }
        
    }

    return response()->json([
        'success' => true,
        'accessories' => $accessories,
    ]);
}

内容的提问来源于stack exchange,提问作者BIlal Ahmed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 21:52:01