Autor Zpráva
PetrBK
Profil
Ahoj,
mohl by mi někdo, prosím, poradit s následujícím problémem?

Na stránce mám dvě tlačítka pro vysunování elementů: 1. je pro vyhledávací formulář a 2. pro řazení výsledků.

1. tlačítko funguje perfektně, ale druhé nelze na druhé kliknutí zavřít. Zavřít jej mohu pouze kliknutím na 1. tlačítko (což je žádoucí efekt). Ale obráceně to už také nefunguje (zavřít 1. element kliknutím na 2. tlačítko).

HTML:
<a href="javascript:void(0)" onclick="open_filter()" id="btn_filter">Custom filter</a> 
<a href="javascript:void(0)" onclick="open_sort_by()" id="btn_sort_by">Sort by</a>

JS:
<script>  
  var prevScrollpos = window.pageYOffset;
  
  window.onscroll = function() {
    var currentScrollPos = window.pageYOffset;
    if (prevScrollpos > currentScrollPos) {
      $('nav').removeClass('hide');
      $('#filter_def').removeClass('hide');
      $('#filter_nav').removeClass('hide'); 
    } else {
      $('nav').addClass('hide');
      $('#filter_def').addClass('hide');
      $('#filter_nav').addClass('hide');
    }
    prevScrollpos = currentScrollPos;
    
    // Main filter
    $('#filter').removeClass('active'); 
    $('#btn_filter').removeClass('active'); 
    $('#btn_filter').html('Custom filter'); 
    // Sort by
    $('#filter_sort_by').removeClass('active'); 
    $('#btn_sort_by').removeClass('active'); 
  }
  
  // Open/close custom filter
  function open_filter() {      
    if ($('#btn_filter').hasClass('active') === true){
      // Button
      $('#btn_filter').removeClass('active'); 
      // Form
      $('#btn_filter').html('Custom filter'); 
      $('#filter').removeClass('active'); 
    } else { 
      // Button
      $('#btn_filter').addClass('active'); 
      $('#btn_filter').html('Close filter'); 
      // Form
      $('#filter').addClass('active'); 
      // Close sort by filet
      $('#filter_sort_by').removeClass('active'); 
      $('#btn_sort_by').removeClass('active'); 
    }      
  }
  
  // Open/close sort by filter
  function open_sort_by() {      
    if ($('#btn_filter').hasClass('active') === true){
      // Button
      $('#btn_sort_by').removeClass('active'); 
      // Form
      $('#filter_sort_by').removeClass('active');  
    } else {
      // Button
      $('#btn_sort_by').addClass('active'); 
      // Form
      $('#filter_sort_by').addClass('active'); 
      // Close main filter
      $('#filter').removeClass('active'); 
      $('#btn_filter').removeClass('active'); 
    }      
  }  
</script>

Děkuji
P.
Kajman
Profil
Na řádku 48 kontroluje aktivnost prvního tlačítka místo druhého.
PetrBK
Profil
Kajman:
Obdivuji Vás, že v tom "guláši" tu záměnu najdete a vůbec máte čas to projít. Děkuji.

Nicméně, druhou část jsem celou zjednodušil do jedné funkce a již to funguje jak má.
 function custom_filter(new_btn_this, new_btn_2nd){
    // Buttons
    var btn_this = $("#" + new_btn_this);
    var btn_2nd = $("#" + new_btn_2nd);
    //Forms
    var form_this = $("." + new_btn_this);
    var form_2nd = $("." + new_btn_2nd);
    
    if ($(btn_this).hasClass('active') === true){
      $(btn_this).removeClass('active');
      $(form_this).removeClass('active');  
    } else {
      $(btn_this).addClass('active'); 
      $(form_this).addClass('active'); 
      $(btn_2nd).removeClass('active');  
      $(form_2nd).removeClass('active');      
    }
  }

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0