Как получить идентификатор брата с помощью класса в JQuery

Я немного запутался, чтобы получить доступ к брату элемента по его классу, используя jQuery.

Возвращает:

Название филиала: не определено

Город филиала: [объект Объект]

Вот мой код:

$(document).ready(function() {
  $(".ifsc_code").on("keyup", function() {
    console.log("Branch Name:" + $(this).parent().parent().parent().find("input.branch_name").attr('id'));
    console.log("Branch City:" + $(this).siblings(".branch_city"));
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="col-sm-4">
  <div class="form-group form-float">
    <label class="form-label">IFSC Code*</label>
    <div class="form-line">
      <input id="ifsc_code" type="text" name="ifsc_code" minlength="11" maxlength="11" class="form-control ifsc_code" required>
    </div>
  </div>
</div>
<div class="col-sm-4">
  <div class="form-group form-float">
    <label class="form-label">Branch Name*</label>
    <div class="form-line">
      <input id="branch_name" type="text" name="branch_name" class="form-control branch_name" readonly>
    </div>
  </div>
</div>

У меня три раза один и тот же код, используемый в качестве динамического кода с одними и теми же классами, так что я хочу выполнить это только с помощью класса.

Спасибо

2 ответа

Вы пропустили parent() в цепи.
Я бы порекомендовал использовать closest(".col-sm-4") или дать это div какой-то значимый класс и использовать его вместо.
Также, branch-city нигде не найти в вашем HTML, как вы думаете, найти его?
Я прокомментировал это, так как я не могу догадаться, где это должно быть или что это.

$(document).ready(function() {
  $(".ifsc_code").on("keyup", function() {
    console.log("Branch Name:" + $(this).parent().parent().parent().parent().find("input.branch_name").attr('id'));
    // There is no element with class 'branch_city'
    // console.log("Branch City:" + $(this).siblings(".branch_city"));
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="col-sm-4">
  <div class="form-group form-float">
    <label class="form-label">IFSC Code*</label>
    <div class="form-line">
      <input id="ifsc_code" type="text" name="ifsc_code" minlength="11" maxlength="11" class="form-control ifsc_code" required>
    </div>
  </div>
</div>
<div class="col-sm-4">
  <div class="form-group form-float">
    <label class="form-label">Branch Name*</label>
    <div class="form-line">
      <input id="branch_name" type="text" name="branch_name" class="form-control branch_name" readonly>
    </div>
  </div>
</div>

На самом деле, если вы хотите, чтобы элементы взаимодействовали через иерархические отношения (а не просматривали весь DOM), я бы обернул оба div в контейнере div с некоторым классом, скажем container и тогда я бы сделал:

console.log("Branch Name:" + $(this).closest(".container").find("input.branch_name").attr('id'));

Вы пытаетесь выбрать .form-group с помощью $(this).parent().parent().parent() это не имеет .branch_name ребенок. Используйте это вместо

$(this).closest(".col-sm-4").next().find("input.branch_name")

$(".ifsc_code").on("keyup", function(){
    console.log("Branch Name:"+$(this).closest(".col-sm-4").next().find("input.branch_name").attr('id'));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="col-sm-4">
  <div class="form-group form-float">
  <label class="form-label">IFSC Code*</label>
    <div class="form-line">
      <input id="ifsc_code" type="text" name="ifsc_code"  minlength="11" maxlength="11" class="form-control ifsc_code" required>
    </div>
  </div>
</div>
<div class="col-sm-4">
  <div class="form-group form-float">
  <label class="form-label">Branch Name*</label>
    <div class="form-line">
     <input id="branch_name" type="text" name="branch_name" class="form-control branch_name" readonly>
    </div>
  </div>

Другие вопросы по тегам