Скрыть опцию выпадающего на основе флажка - PullRequest
0 голосов
/ 23 января 2019

Я нахожусь в среде WordPress, я создал несколько отфильтрованных просмотров постов с использованием WP-фасета плагина и установил два флажка и выпадающий фильтр.

Итак, у меня есть 2 флажка:

<div class="facetwp-facet facetwp-facet-isola facetwp-type-checkboxes" 
data-name="isola" data-type="checkboxes">
    <div class="facetwp-checkbox" data-value="cefalonia">Cefalonia <span 
class="facetwp-counter">(11)</span>
    </div>
    <div class="facetwp-checkbox" data-value="corfu">Corfù <span     
class="facetwp-counter">(28)</span>
    </div>
</div>

И тогда у меня уже есть этот выпадающий список с помощью плагина:

<div class="facetwp-facet facetwp-facet-localita_di_corfu facetwp-type- 
dropdown" data-name="localita_di_corfu" data-type="dropdown">
<select class="facetwp-dropdown">
    <option value="ipsos">Ipsos</option>
    <option value="acharavi">Acharavi</option>
    <option value="dassia">Dassia</option> 
    <option value="gouvia">Gouvia</option> 
</select>
</div>

То, что я хочу, это:

  • если я выберу первый флажок Кефалония, то покажу только опции "ipsos" и "acharavi" в выпадающем списке.
  • если я выберу второй флажок Corfù, тогда будут показаны только опции «Dassia» и «Гувия» в выпадающем списке.
  • , если выбраны оба варианта, показать все связанные параметры.

просто нужна начальная точка .. Я нашел, как сделать это с 2 раскрывающимися списками, но не с флажками .. Я не очень хорош с javascript большое спасибо

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Вы можете попробовать установить атрибут disabled в опции в зависимости от значения флажок раскрывающегося списка:

$(".facetwp-dropdown option").each(function(){
  $(this).attr('disabled','disabled');
});
$(".facetwp-dropdown").val("");
$('[data-value="cefalonia"]').change(function(){
  $(".facetwp-dropdown").val("");
  if($(this)[0].checked){
    $(".facetwp-dropdown option[value='ipsos'],.facetwp-dropdown option[value='acharavi']").removeAttr('disabled');
  }
  else{
    $(".facetwp-dropdown option[value='ipsos'],.facetwp-dropdown option[value='acharavi']").attr('disabled','disabled');
  }
});

$('[data-value="corfu"]').change(function(){
  $(".facetwp-dropdown").val("");
  if($(this)[0].checked){
    $(".facetwp-dropdown option[value='dassia'],.facetwp-dropdown option[value='gouvia']").removeAttr('disabled');
  }
  else{
    $(".facetwp-dropdown option[value='dassia'],.facetwp-dropdown option[value='gouvia']").attr('disabled','disabled');
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="facetwp-facet facetwp-facet-isola facetwp-type-checkboxes" 
data-name="isola" data-type="checkboxes">
    
    <input type="checkbox" data-value="cefalonia">Cefalonia
    <input type="checkbox" data-value="corfu">Corfù

</div>


<div class="facetwp-facet facetwp-facet-localita_di_corfu facetwp-type- 
dropdown" data-name="localita_di_corfu" data-type="dropdown">
<select class="facetwp-dropdown">
    <option value="ipsos">Ipsos</option>
    <option value="acharavi">Acharavi</option>
    <option value="dassia">Dassia</option> 
    <option value="gouvia">Gouvia</option> 
</select>
</div>
0 голосов
/ 23 января 2019

Понимание: Если я не неправильно понимаю ваш сценарий, вы просите провести некоторую разработку интерфейса (HTML, CSS, JavaScript), чтобы варианты раскрывающегося списка изменялись в зависимости от выбора пользователя.

Объяснения модификаций Из того, что я вижу в вашем HTML , вы используете набор классов CSS, предназначенных для стилизации элемента DIV в качестве флажка, а затем устанавливаете значения с помощьюатрибут данных как способ чтения его значения.Лично я чувствую, что это немного затянуто, и вам было бы лучше сделать их флажками и просто стилизовать флажок с помощью CSS, чтобы как вам удобнее работать, если ваши флажки являются ползунковыми переключателями, то вы можете включить скрытый флажоки что значение флажка обновляется в результате взаимодействий, которые выполняет пользователь.

Поэтому я сделал мой код более простым для вас, чтобы я мог его придерживаться, я признаю, что это не самый эффективный способ его кодирования,но это рабочий пример для вас, чтобы изменить содержание вашего сердца.

Обратите внимание, что это не скрывает параметры, но запрещает пользователю выбирать их. Если вы хотите скрыть параметр, вам нужно будет перейти к каждому параметру вDIV и установите, что атрибут отображения CSS в false.Я не кодировал его таким образом, так как мне пришлось бы исследовать, как это согласуется с его совместимостью с HTML.

Код:

function checkState(x){
  var Checkboxes = document.getElementsByName("checkbox");
  var Options = document.getElementsByName("options");
  
  for (i = 0; i < Options.length; i++){
    Options[i].disabled = true;
  }

  if (Checkboxes[0].checked && Checkboxes[1].checked){
    for (i = 0; i < Options.length; i++){
      Options[i].disabled = false;
    }
  }
  if (Checkboxes[0].checked && (Checkboxes[1].checked == false)){
    Options[0].disabled = false;
    Options[1].disabled = false;
  }
  if (Checkboxes[1].checked && (Checkboxes[0].checked == false)){
    Options[2].disabled = false;
    Options[3].disabled = false;
  }

}
<form>
  Cefalonia: <input name="checkbox" type="checkbox" class="facetwp-checkbox" value="cefalonia" onclick="checkState(this)"><br>
  Corfù: <input name="checkbox" type="checkbox" class="facetwp-checkbox" value="corfù" onclick="checkState(this)">
</form>

<div class="facetwp-facet facetwp-facet-localita_di_corfu facetwp-type- 
dropdown" data-name="localita_di_corfu" data-type="dropdown">
<select class="facetwp-dropdown">
    <option name="options" value="ipsos" disabled>Ipsos</option>
    <option name="options" value="acharavi" disabled>Acharavi</option>
    <option name="options" value="dassia" disabled>Dassia</option> 
    <option name="options" value="gouvia" disabled>Gouvia</option> 
</select>
</div>

Понимание происходящего Во-первых, у нас нет идентификатора или имен, присвоенных опциям, это важно, потому что у вас нет способавыбрать элемент в JavaScript без него (если только не используется библиотека JS с предварительно закодированной функцией, такой как jQuery, которая проверяет каждый параметр на странице, что может замедлить работу веб-сайта, особенно если у вас есть несколько форм в другом месте на вашем веб-сайте).

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

Поскольку я предполагаю, что это только две доступные опции, я сделал различные операторы if, в противном случае потребовался бы оператор switch, который был бы более эффективным, если их больше, чемпросто kefelonia и corfu как варианты выбора, потому что вы не указали это в yнаше описание к вашему вопросу.

Затем мы зациклим каждое значение и включим или отключим опцию, основываясь на выбранном флажке.

Сначала отключим их все, таким образом, если там не выбраны все поляотключено Если мы выберем все параметры, мы включим все. Если мы не сделаем этого, отобразится только то, что имеет отношение

...