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

2015-02-03 17:55
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 ?

edytowany 2x, ostatnio: masterO, 2015-02-03 17:56

Pozostało 580 znaków

2015-02-03 18:01
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).


to stare zrodlo ktore przerobilem ale zostalo mi wlasnie jeszcze zabawa w JS. Dzieki za odpowiedz nie ma problemu zebym wystawil funkcje poza document ready - masterO 2015-02-03 18:04

Pozostało 580 znaków

2015-02-03 18:05
0

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

Pozostało 580 znaków

2015-02-03 18:07

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.


Lepiej było by chyba: $('table').on('click', 'tr', abc);. Mniej eventów i nie trzeba iterować + zadziała nawet jak dynamicznie dodamy nowy wiersz. - hauleth 2015-02-03 19:00
Początkującym tego nie radzę - mogą nie ogarnąć tego, że event zapina się wtedy do tabelki, a nie bezpośrednio do tr. Czasem rodzi to pewne komplikacje, szczególnie jak obserwujesz parę zdarzeń, a jedno z nich zatrzymujesz przez return false (co jest zdecydowanie częściej używane niż event.preventDefault()) - dzek69 2015-02-04 09:14

Pozostało 580 znaków

2015-02-03 18:15
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

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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