0

I want to generate a list on items in a drop down based on a previous choice from another select. All items ar in the database.

Here is what I did:

Javascript:

$(document).ready(function () {
    $(document).on('change', '#province_name', function() {
        var province_id = $(this).val();
        var div = $(this).parent();
        var op = " ";
        $.ajax({
            type: 'get',
            url: '{!!URL::to('admin/findIDProvince')!!}',
            data: {'id':province_id},
            success: function(data){
                for (var i = 0; i < data.length; i++){
                    op += '<option value="'+data[i].id+'">'+data[i].city_name+'</option>';
                }
                div.find('#city_name').html(" ");
                div.find('#city_name').append(op);
            },
            error: function(){
                console.log('success');
            },
        });
    });
});

Routes (web.php):

Route::namespace('Admin')->prefix('admin')->middleware('auth')->group(function (){
    $this->get('/findIDProvince', 'SchoolsListController@findIDProvince');
});

Controller (Admin/SchoolsListController.php):

public function findIDProvince(Request $request)
    {
        $data = City::select('city_name', 'id')->where('province_id', $request->id)->take(100)->get();
        return response()->json($data);
    }

HTML (view.blade.php)

<div class="form-group">
    <label class="col-md-3" for="province_name">province_name</label>
    <div class="col-md-9">
        <select id="province_name" name="province_name" class="form-control col-md-12" required>
            @foreach($province_names as $province_name)
                <option value="{{ $province_name->id }}">{{ $province_name->province_name }}</option>
            @endforeach
        </select>
    </div>
</div>
<div class="form-group">
    <label class="col-md-3" for="city_name">city_name</label>
    <div class="col-md-9">
        <select id="city_name" name="city_name" class="form-control col-md-12" required>
        </select>
    </div>
</div>

What am I doing wrong?

1
  • <select id="city_name" ... is not targetable via $("#city"); that's a typo. Commented May 22, 2018 at 20:14

1 Answer 1

1

You are using

div.find('#city').html(" ");
div.find('#city').append(op);

but in your blade you have

id = city_name

Use:

div.find('#city_name').html(" ");
div.find('#city_name').append(op);
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.