[JS][jQuery] Checkbox, brak reakcji na kliknięcie.

0

Witam

Mam w każdym wierszu tabeli komórkę z cb, dodaje kod, żeby po kliknięciu na ten wiersz stan cb zmieniał się:

    $('tbody > tr').click(function() {
        var tr = $(this);
        var cb = tr.find(':checkbox');
        var currState = cb.attr('checked');
        cb.attr('checked', ! currState);
    })

To działa, ale już na sam cb kliknąć nie mogę, tzn nie zmienia to jego stanu. Dlaczego?

0

Może spróbować ustawić jakiś trigger dla cb? Generalnie sprowadzi się to do napisania kodu więc nie wiem czy jest to dla Ciebie rozwiązanie do zaakceptowania.

0

Jeśli masz taką strukturę:

<tr><td>
   <input type="checkbox" /></td>
</tr><tr> ...

To po kliknięciu na tego inputa, wywoła się najpierw metoda click tegoż inputa, a następnie metoda click elementu , następnie ( którą oprogramowałeś ), następnie rodzic , itd. Zjawisko to nosi nazwę event bubbling :)
Możesz więc napisać funkcję, która oprogramuje kliknięcie na checkboxa i zapobiegnie dalszym wywołaniom funkcji w górę, zapobiegnie temu bąbelkowaniu. Jak używasz jQuery, to kod jest prosty:

$(":chexbox").click(function(event) {
  event.stopPropagation(); 
})
0

Dzięki za odpowiedź, próbowałem stopPropagation() bez efektu, problem był innej tresći, nie załączyłem całego kodu, a to pewnie gdzie indziej był błąd, napisanie tego od nowa pomogło:)

Poza tym dzięki za nowy ang zwrot, nie znałem go i nazywałem to zjawisko po swojemu, bardziej dosadnie:D

Jakby ktoś miał podobny problem, fragment działający bez problemów:

     $('tbody > tr').each(function(index) {
        var tr = $(this);
        tr.find('td.name div').hide();
        ((index & 1) == 0) ? tr.addClass('even') : tr.addClass('odd');
        tr.click(function() {
           var tr = $(this);
           (tr.hasClass('marked')) ? unmarkRow(tr) : markRow(tr);
        }).hover(function() {
            tr.find('td.name > div').show();
        }, function() {
            tr.find('td.name > div').hide();
        });
     });
    
     function markRow(row) {
         row.find(':checkbox').attr('checked', true);
         row.addClass('marked');
     }

     function unmarkRow(row) {
         row.find(':checkbox').attr('checked', false);
         row.removeClass('marked');
     }

1 użytkowników online, w tym zalogowanych: 0, gości: 1