【问题标题】:AJAX auto populate dropdown base from first and second dynamic dropdownAJAX 从第一个和第二个动态下拉列表自动填充下拉列表
【发布时间】:2018-04-28 19:36:24
【问题描述】:

我使用的是 Laravel 5.5,并且有 3 个动态下拉菜单。我的第一个下拉菜单是服务。服务有很多类别,类别是第二个下拉列表。一个类别属于一个服务。现在这些类别有很多方法,这是第三个下拉列表。方法属于类别。

这就是我到目前为止所做的。

create.blade.php

<!-- Service Id Field -->
<div class="form-group col-sm-6">
    <label for="service_id">Service:</label>
    <select name="service_id" class="form-control" required id="service_id">
        <option disabled selected>Choose Services</option>
            @foreach ($services as $service)
                <option value="{{ $service->id }}">{{ $service->description }}</option>
            @endforeach
    </select>
</div>

<!-- Categories Id Field -->
<div class="form-group col-sm-6">
    <label for="category_id">Category:</label>
    <select  name="category_id" class="form-control" required id="category_id">
        <option disabled selected>Choose Category</option>
            {{-- @foreach ($categories as $category)
                <option value="{{ $category->id }}">{{ $category->name }}</option>
            @endforeach --}}
    </select>
</div>

<!-- Methodologies Id Field -->
<div class="form-group col-sm-6">
    {!! Form::label('methodology_id', 'Method:') !!}
     {!! Form::select('methodology_id', $methodologies, null, ['class' => 'form-control','required'])!!}
</div>

在我的脚本中

$(function() {
        $('#service_id').change(function() {

            let url = '{{ url('encoder') }}' + '/service/' + $(this).val() + '/categories/';

            $.get(url, function(data) {
                console.log(data);
                let select = $('form select[name= category_id]');

                select.empty();

                $.each(data,function(key, value) {
                    console.log(key + ' '+ value);
                    select.append('<option value=' + key + '>' + value + '</option>');
                });
            });
        });
    });

    // Dynamic property dropdown for methodologies
    $(function() {
        $('select[name=category_id]').change(function() {

            let url2 = '{{ url('encoder') }}' + '/categories/' + $(this).val() + '/methodologies/';

            $.get(url2, function(data) {
                let select2 = $('form select[name= methodology_id]');

                select2.empty();

                $.each(data,function(key, value) {
                    console.log(key + ' '+ value);
                    select2.append('<option value=' + key + '>' + value + '</option>');
                });
            });
        });
    });

我在我的 ajax 中创建了 2 个函数,如果第一个下拉菜单发生变化。第二个下拉列表将根据所选数据的第一个下拉列表填充。但是,所有这些都运行良好。在第三个下拉列表被填充之前,我仍然需要在第二个下拉列表中进行选择。

我想填充第三个下拉列表,methodologies_id 取决于第一个下拉列表填充的第一个选项。

如果有人可以提供帮助,我们将不胜感激。 提前致谢。

【问题讨论】:

  • 您的 select3 是根据 select2 中的选定值填充的。当您的 select1 被选中时,它会填充 select2,而 select2 中没有选定的值,因此在您在 select2 中进行选择之前不会填充 select3。如果您想针对 select1 中的选择填充 select3,您可能需要定义一个关系 b/w servicesmethodologies 并为其创建一个路由。或者在 select1 更改事件上选择一个默认值,并在第一个函数上触发 select2 的更改事件。

标签: php jquery ajax laravel laravel-5


【解决方案1】:

我不是 100% 确定我的问题是否正确,但您想更改选择 2 并选择 3 以根据第一个选择进行更改。

在您的第二个功能上,您正在观看第二个选择以进行更改 $('select[name=category_id]').change(function() { 将选择器更改为 $('#service_id').change(function() {,如果您更改第一个选择,它应该会更新。

您也可以将这两个函数重构为一个。

$(function() {
  $('#service_id').change(function() {

    let url = '{{ url('encoder') }}' + '/service/' + $(this).val() + '/categories/';

    $.get(url, function(data) {
      console.log(data);
      let select = $('form select[name= category_id]');

      select.empty();

      $.each(data, function(key, value) {
        console.log(key + ' ' + value);
        select.append('<option value=' + key + '>' + value + '</option>');
      });
    });

    let url2 = '{{ url('encoder') }}' + '/categories/' + $(this).val() + '/methodologies/';

    $.get(url2, function(data) {
      let select2 = $('form select[name= methodology_id]');

      select2.empty();

      $.each(data, function(key, value) {
        console.log(key + ' ' + value);
        select2.append('<option value=' + key + '>' + value + '</option>');
      });
    });
  });
});

【讨论】:

  • 现在它正在工作。但我传递了第一个下拉值的 id。我应该传递第二个下拉列表的值,即 category_id 来获取第三个下拉列表的键值。
  • 我的错误。我得到正确的值。谢谢您的帮助!欣赏它!现在它起作用了! :)
  • 你好@Daniel。很抱歉给您带来不便,但我在第一个下拉列表中得到了 id 的值,它应该是第二个下拉列表中要填充的第一个选项的 id。因为一个方法属于一个类别。对不起
  • 我认为这是因为它传递了let url2 = '{{ url('encoder') }}' + '/categories/' + $(this).val() + '/methodologies/';,但它应该是需要在 url2 中传递的第二个下拉列表的键。
  • 那么你可以使用let url2 = '{{ url('encoder') }}' + '/categories/' + $(category_id).val() + '/methodologies/'; 代替。 $(category_id).val() 将为您提供类别的 ID。对不起,那是我的错。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-24
  • 2017-04-06
  • 2013-12-06
  • 1970-01-01
  • 2012-01-04
  • 2023-03-14
相关资源
最近更新 更多