jquery „hasClass()” nu funcționează? (Programare, Javascript, Jquery)

Xhynk a intrebat.

Am nevoie să ascund un div dacă un alt div are o clasă.

Am creat un exemplu foarte simplu AICI

Am nevoie ca div-ul din partea de jos să se ascundă atunci când cuvântul „click” este… ei bine… apăsat. Adaugă o clasă la div-ul din mijloc foarte bine, dar se pare că hasClass() nu vrea să funcționeze?

NOTĂ: Structura trebuie să fie ca aceasta. Dacă se face clic pe „click”, modificați div-ul din mijloc (adăugați o clasă?) și manipulați div-ul de jos pe baza div-ului din mijloc. Cu această configurație – nu pot să fac doar „dacă se face clic pe CLICK, slideUp() div-ul de jos”.

De asemenea, odată ce se face clic pe „ok” sau „cancel”, se va inversa, deoarece div-ul din mijloc nu va mai avea clasa. Cu condiția să fie metoda pe care o pot face să funcționeze aici, haha.

Comentarii

  • ați realizat că, în exemplul dvs., hasclass este apelat doar o singură dată. Nu este un eveniment, nu se va declanșa de fiecare dată când acel element are acea clasă. hasClass este o funcție destinată a fi utilizată în timpul un eveniment pentru a verifica dacă un anumit element are o anumită clasă –  > Por SpYk3HH.
6 răspunsuri
EyalAr

if declarație este în afara oricărei funcții, deci nu există niciun motiv pentru ca ea să fie apelată după ce scriptul este încărcat.

Vedeți această violență, , cred că asta e ceea ce vrei tu.

Comentarii

  • Minunat! Mulțumesc! @Toată lumea care a scris – mulțumesc! Deci, trebuie să pun utilizarea în cadrul funcției în sine – am înțeles, mulțumesc 🙂 –  > Por Xhynk.
Jack

Pe de altă parte, o altă variantă pentru a verifica dacă există o clasă este:

if ( $('body.className').length ) {

Totuși, recomand totuși hasClass. Este plăcut să vezi uneori o variație.

Comentarii

  • Cred că ai vrut să adaugi un spațiu între body și .className –  > Por chad steele.
  • Verific dacă elementul body are clasa –  > Por Jack.
Mike Park

Acest lucru este apelat doar o singură dată, când se încarcă scriptul. Trebuie să vă asigurați că este apelată în .click(...) handler.

if($('#timestampdiv').hasClass('hidepub')) {
    $('#major-publishing-actions').slideUp('slow');
}

Comentarii

  • Tocmai scriam asta, dar m-ai întrecut. Deoarece toate evenimentele dvs. sunt legate de etichetele de ancorare <a> puteți pune această declarație if într-un eveniment similar cu: $("a").on("click", function(){ if($("#timestampdiv").hasClass("hidepub")){ $("#major-publishing-actions").slideUp("slow");}); –  > Por Christopher.Cubells.
Justin John

După cum au menționat și alții, nu aveți un apel la if la toți gestionarii de evenimente de clic. Creați o funcție personalizată cu declarație în interiorul if și apelați-o pe toate gestionarii de clicuri.

Verificați acest lucru Fiddle

Jim

După ce adăugați clasa la elementul DOM, aceasta ar trebui să ascundă corect elementul.

$('.element').click(function()
{
    $('.thisElement').addClass('hidepub');
    if($('.thisElement').hasClass('hidepub')) {
         $('.thisElement').hide();
    }
});

ᾠῗᵲᄐᶌ

Le puteți combina pe toate într-o singură funcție – Și doriți ca acea verificare să fie în interiorul funcțiilor de clic

Puteți să reduceți addclass removeclass utilizând toggleClass și trecând o condiție

$('a.edit-timestamp,a.save-timestamp,a.cancel-timestamp').click(function() {
    var $tsdiv = $("#timestampdiv");
    // add class showpub if edit is clicked
    $tsdiv.toggleClass('showpub',$(this).hasClass('edit-timestamp'));
    // add class hidepub only if it wasn't edit that was clicked
    $tsdiv.toggleClass('hidepub',!$(this).hasClass('edit-timestamp'));  

    // then do your toggle                            
    if ($tsdiv.hasClass('hidepub')) {
        $('#major-publishing-actions').slideUp('slow');
    }else{
        $('#major-publishing-actions').slideDown('slow');
    }
});

http://jsfiddle.net/JPcge/

Puteți inversa acest lucru schimbând logica transmisă în metodele toggleClass()