Как получить доступ к другому дочернему классу от родителя в jQuery?

#html #jquery

Вопрос:

У меня моя разметка выглядит так:

  <div class="col-md-12 mainDiv">
    <div class="rowDiv"> <!--first row starts-->

        <div class="a1">
            <div class="form-group">
                <div class="dropdown-container-skills">
                    <select class="dropdown-skills">
                        <option>Select Any</option>
                        <option value="S1">Skill 1</option>
                        <option value="S2">Skill 2</option>
                        <option value="S3">Skill 3</option>
                    </select>
                </div>
            </div>
        </div>

        <div class="a1">
            <div class="form-group">
                <div class="dropdown-container-topics">
                    <select class="dropdown-topics">
                        <option>Select Any</option>
                        <option value="T1">Topic 1</option>
                        <option value="T2">Topic 2</option>
                        <option value="T3">Topic 3</option>
                    </select>
                </div>
            </div>
        </div>
        
    </div><!--first row ends-->

    <div class="rowDiv"> <!--second row starts-->

        <div class="a1">
            <div class="form-group">
                <div class="dropdown-container-skills">
                    <select class="dropdown-skills">
                        <option>Select Any</option>
                        <option value="S1">Skill 1</option>
                        <option value="S2">Skill 2</option>
                        <option value="S3">Skill 3</option>
                    </select>
                </div>
            </div>
        </div>

        <div class="a1">
            <div class="form-group">
                <div class="dropdown-container-topics">
                    <select class="dropdown-topics">
                        <option>Select Any</option>
                        <option value="T1">Topic 1</option>
                        <option value="T2">Topic 2</option>
                        <option value="T3">Topic 3</option>
                    </select>
                </div>
            </div>
        </div>
        
    </div><!--second row ends-->


</div>
 

Я хочу что-то вроде того, когда я выбираю навык из первой строки, он будет обновлять темы в самой первой строке. Также, когда я выбираю навык из второго ряда, он обновит темы во втором ряду и так далее. Я написал сценарий для этого как:

 $('body').on('change', '.dropdown-skills', function(e) {
    $.ajax({
          type: "GET",
          url: 'getTopics/'   $(this).val(),
          dataType : "html",
          success: function(response)
          {
            $(this).closest('.rowDiv').find('.dropdown-container-topics').html(response);

          }
    });
});
 

т. е. когда я изменю класс dropdown-skills , он получит темы в виде html из функции контроллера, а затем будет передан в класс dropdown-container-topics текущей строки.
Но это не работает. Как это можно сделать?

Комментарии:

1. Хорошим началом было бы поместить обработчик событий «изменение» в выбранные элементы, а не в текст документа

2. В чем именно проблема? Ваш код, похоже, работает, т. е. он находит соответствующий .dropdown-container-topics и изменяет внутренний HTML. Возможно, ваш контроллер не возвращает правильный HTML-код?

3. Привет, ваш ajax не может определить, что находится $(this) внутри функции успеха, поэтому вы можете просто сохранить ссылку $(this) на какую-либо переменную вне ajax, т. Е. : var selector = $(this) и использовать ту же функцию успеха внутри selector.closest('.rowDiv')...

4. @Swati, это решило проблему.