jquery 在容器中使用 parent() 和 closest()

jquery working in containers with parent() and closest()

我很难弄清楚如何让 jQuery 函数在不同的容器中单独工作,对我来说,容器称为 'dyndrop'。

我有两个下拉菜单,第二个下拉菜单取决于第一个下拉菜单的值。到目前为止,它适用于页面上的第一个下拉列表对,但所有其他下拉列表都不会。

我知道它来自 selecting .aufgabe_0,它将 select DOM 中的每个 class,即 10 个。那么如何才能我让这个函数只在 'dyndrop' 容器内工作。

谢谢!

HTML

 <div class="dyndrop columns nopadding large-4">
    <div class="columns large-6">
        <label>
          <select class="aufgabe_0"> <!-- aufgabe_1 -->
            <!-- Frage ist ob CGI/CAS dieses Feld dynamisch ändert -->
            <option disabled selected value="">Aufgabe</option>
            <option value="int">Interieur</option>
            <option value="ext">Exterieur</option>
          </select>
        </label>
    </div>
    <div class="columns large-6">
        <label>
          <select class="bauteil_0" disabled> <!-- bauteil_1 -->
            <!-- reagiert auf vorheriege eingabe -->
            <option disabled selected value=""></option>
            {% for int in menu_int %}
            <option value="int">{{ int }}</option>
            {% endfor %}
            {% for ext in menu_ext %}
            <option value="ext">{{ ext }}</option>
            {% endfor %}
          </select>
        </label>
    </div>
</div>

JS

$(function() {
  $('.aufgabe_0').change(function(){
    if ($('.aufgabe_0 option:selected').val() == 'int') {
      console.log('interieur ausgewählt');
      $('.bauteil_0').prop( "disabled", false );
      $('.bauteil_0 option').hide().filter('.bauteil_0 option[value="int"]').show();
    }
    else if ($('.aufgabe_0 option:selected').val() == 'ext') {
      console.log('exterieur ausgewählt')
      $('.bauteil_0').prop( "disabled", false );
      $('.bauteil_0 option').hide().filter('.bauteil_0 option[value="ext"]').show();
    }
    else {
      $('.bauteil_0').prop( "disabled", true );
    }
  });
});

您可以使用 .closest() 遍历到共同的父元素,然后使用 .find() 来定位想要的元素。

$('.aufgabe_0').change(function () {
    //Use these object
    var aufgabe = $(this);
    var bauteil = aufgabe.closest('.dyndrop').find('.bauteil_0');

    ...
});

$('.aufgabe_0').change(function() {
  //Use these object
  var aufgabe = $(this);
  var bauteil = aufgabe.closest('.dyndrop').find('.bauteil_0');

  bauteil.prop('disabled', !bauteil.prop('disabled'))
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="dyndrop columns nopadding large-4">
  <div class="columns large-6">
    <label>
          <select class="aufgabe_0">  
          <option value="int1">Select</option>
            <option value="int">Interieur</option>
          </select>
        </label>
  </div>
  <div class="columns large-6">
    <label>
          <select class="bauteil_0" disabled>
            <option value="int">1</option>
          </select>
        </label>
  </div>
</div>
<div class="dyndrop columns nopadding large-4">
  <div class="columns large-6">
    <label>
          <select class="aufgabe_0">  
          <option value="int1">Select</option>
            <option value="int">Interieur</option>
          </select>
        </label>
  </div>
  <div class="columns large-6">
    <label>
          <select class="bauteil_0" disabled>
            <option value="int">1</option>
          </select>
        </label>
  </div>
</div>

或者你可以使用这种方式,如果你有更多的 .bauteil_0.dyndrop ....! select 只有您在问题中的下拉列表。

$('.aufgabe_0').change(function(event) {
    var dependent = $(this).parents('.columns.large-6').next().find('.bauteil_0');
    //now work with dependent
});