如何在 Jquery 中为动态下拉列表创建循环?

Posted

技术标签:

【中文标题】如何在 Jquery 中为动态下拉列表创建循环?【英文标题】:How to create a loop for dynamic dropdownlist in Jquery? 【发布时间】:2021-10-11 21:52:56 【问题描述】:

我有显示控制器的 dropdownlistjavascript 代码:

public async Task<IActionResult> GetSubCategory(Guid id)
    
        var SubCategory_List = await _admin.GetGategories();

        return Json(new SelectList(SubCategory_List.Where(c => c.ParentId == id), "Id", "CategoryName"));

    
  





$.getJSON("/AdminPanel/Product/GetFirstSub/" + np.MainCat,
function (data) 
    $.each(data,
        function () 
            $("#firstsub").append('<option value= ' + this.value + '>' + this.text + '</option>');

            const idfirst = this.value;
            console.log(idfirst);                           

            $("#CategoryId").empty();
            $.getJSON("/AdminPanel/Product/GetSecondSub/" + idfirst,
                function (data) 
                    $.each(data,
                        function () 
                            $("#CategoryId").append('<option value= ' + this.value + '>' + this.text + '</option>');
                        );
                
            );
        );

下拉列表值是指南字符串 ...

consol.log 显示如下:

我想单独接收这些值并使用它们……怎么办?

【问题讨论】:

我建议编辑控制器,使selector init方法可以在一个http请求中获取2个selector的选项,以提高效率。 @Tiny Wang 我不知道是怎么做到的……你能编辑代码吗? 【参考方案1】:

我无法完全重建您的应用程序,因为我没有您的 json 数据。 我认为您不能像以前那样附加选项。 只需根据您的需要更改 If 语句,这样它就可以工作了。 请发布您的 getJson 回复,以便我尽力帮助您。

var getEmployeeDataFromJson = new Promise(
  function(resolve) 
    $.getJSON("https://raw.githubusercontent.com/bmehler/employees/main/employees", function(data) 
      resolve(data);
    );
  
);

var getProductDataFromJson = new Promise(
  function(resolve) 
    $.getJSON("https://raw.githubusercontent.com/bmehler/product/main/product.json", function(data) 
      resolve(data);
    );
  
);

getEmployeeDataFromJson
  .then(function(data_employee) 
    console.log('data-employee', data_employee);
    $.each(data_employee, function(index, value) 
      $('#firstsub').append($('<option>', 
        value: value.id,
        text: value.name
      ));
    );
    getProductDataFromJson
      .then(function(data_product) 
        console.log('data-product', data_product);
        $.each(data_product, function(index, value) 
        // Change this to your needs
          if (value.category == 'Electronics')  // == data_employee[0].id
            $('#CategoryId').append($('<option>', 
              value: value.category,
              text: value.name
            ));
          
        );
      )
      .catch(function(error) 
        console.log(error.message);
      );

  )
  .catch(function(error) 
    console.log(error.message);
  );
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="firstsub">
</select>
<select id="CategoryId">
</select>

【讨论】:

谢谢,我编辑了我的问题并添加了控制器代码 感谢支持 :-)【参考方案2】:

我在这里写了一个演示来展示我的想法,希望它可以解决您的问题或至少提出一些想法。

我认为您可以在初始化选择器时准备好所有数据,这意味着您可以通过 1 个 http 请求完成初始化任务。并在 select DOM 上添加 onchange 事件。

我的看法,home.cshtml

<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<div>
    <select id="city"></select>
    <select id="town"></select>
</div>

<script>
    $(function () 
        initSel();
    );

    $("#city").change(function () 
        var cityid = $("#city option:checked").val();
        console.log(cityid);
        $.ajax(
            url: "https://localhost:44319/home/getTownsById",
            data: 
                cityId: cityid
            ,
            success: function (data) 
                console.info("towns:" + data);
                $("#town").html("");
                for (var i = 0; i < data.length; i++) 
                    $("#town").append('<option value= ' + data[i].townId + '>' + data[i].townName + '</option>');
                
            
        );
    );

    function initSel() 
        $.ajax(
            url: "https://localhost:44319/home/init",
            dataType:"json",
            success: function (data) 
                console.info(data);
                for (var i = 0; i < data.cities.length; i++) 
                    $("#city").append('<option value= ' + data.cities[i].cityId + '>' + data.cities[i].cityName + '</option>');
                
                for (var i = 0; i < data.towns.length; i++) 
                    $("#town").append('<option value= ' + data.towns[i].townId + '>' + data.towns[i].townName + '</option>');
                
            
        );
    
</script>

这是我的家庭控制器:

using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Linq;
using WebApplication1.Models;

namespace WebApplication1.Controllers

    public class HomeController : Controller
    
        public IActionResult Index()
        
            return View();
        

        public JsonResult init() 
            List<City> cities = new List<City>
            
                new City CityId="city1", CityName="city1",
                new City CityId="city2", CityName="city2",
                new City CityId="city3", CityName="city3"
            ;
            var firstCityId = cities[0].CityId;
            var towns = getTownsById(firstCityId);
            Dictionary<string, object> res = new Dictionary<string, object>();
            res.Add("cities", cities);
            res.Add("towns", towns);
            return Json(res);
        

        public List<Town> getTownsById(string cityId) 
            List<Town> data = new List<Town>
            
                new Town CityId="city1",TownId="town1", TownName="town1",
                new Town CityId="city1",TownId="town2", TownName="town2",
                new Town CityId="city2", TownId="town3", TownName="town3",
                new Town CityId="city2", TownId="town4", TownName="town4",
                new Town CityId="city3", TownId="town5", TownName="town5"
            ;
            var towns = data.AsQueryable().Where(town => town.CityId == cityId);
            return towns.ToList<Town>();
        
    

【讨论】:

以上是关于如何在 Jquery 中为动态下拉列表创建循环?的主要内容,如果未能解决你的问题,请参考以下文章

当每个下拉列表动态创建ID时,jquery选择选项数据和值[关闭]

使用jquery mobile创建动态下拉列表

使用JS动态创建国家下拉列表[重复]

如何在 ASP.NET MVC 3 中为填充的下拉列表创建视图模型

如何使用 jquery 和 php 从动态数据中设置默认下拉列表?

如何查找已动态创建且存在于另一个元素中的选择下拉列表的值和 ID