Dlaczego po (document).ready funkcje nie działają?

0

Mam taki kod

<table cellspacing="0" cellpadding="0" width="100%" class="table-01">
    <tr onClick="javascript:abc();">
        <td>lalala</td>
    </tr>
</table>

<script>
function abc() { alert('kuku'); }
</script>

Gdy klikne na napis lalala pkazuje mi się alert z javascryptu wszystko jest cacy. Ale jak dam javascript w tagi .ready to wtedy nie działa.

<table cellspacing="0" cellpadding="0" width="100%" class="table-01">
    <tr onClick="javascript:abc();">
        <td>lalala</td>
    </tr>
</table>

<script>
    $(document).ready(function() {
        function abc() { alert('kuku'); }
    });
</script>

mam blad: ReferenceError: abc is not defined
Czym to jest spowodowane ?

2

Definicję funkcji zawierasz w funkcji. Taki zapis powoduje, że funkcja abc jest dostępna tylko z wewnątrz anonimowej funkcji podpiętej do tego document ready.

Same funkcje definiuj zawsze poza document ready (chyba, że masz istotny powód by tego nie robić - ale wtedy będziesz świadomy, tego co robisz), a wywołuj je ze środka.

I przy okazji: Dlaczego uczysz się z jakichś piętnastoletnich źródeł, które uczą zapisu onClick? Wszystko małymi literami zapisuj. Przedrostek javascript: także jest błędny. Możesz go używać jedynie w href w <a>, ale i tego nie zaleca się (w końcu od czegoś masz onclick).

0

A to teraz zamiast onClick jak mam tabele a wniej np 150 wierszy, to jak inaczej zrobic onClick ?

1

W sensie - jak jedną linijką zapiąć zdarzenia do wszystkich wierszy?

$('table.table-01 tr').click(abc); // wywoła funkcję `abc` na `tr` które są w tabeli z klasą `table-01`.

Jeżeli pytasz po prostu jak poprawić onClick - no to tak jak pisałem - małymi literami zapisuj - onclick. I bez javascript: w środku.

0

Dzieki za odpowiedź. Poprawiłem to onClick i wywaliłem javascript a bede musiał sprawdzić jak to zrobić jedną linijką bo w kazdym TR sa inne dane i w zależności na co wcisnę to one sie mają pobrać. Wiec dam je może w znacznik data-dana1="cos" i data-dana2="cos" i wtedy po drzewie dostane sie do dana1 i dana2. Musze pogrzebać zaraz w dokumentacji i wtedy nie musze wystawiac funkcji poza .ready
Dzieki za pomoc

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