Niezdefiniowana funkcja

0

Od niedawna próbuję swoich sil w pisaniu skryptów do greasemonkey ale natknęlęm się
na bląd którego w żaden sposób nie mogę przeskoczyc. A więc skrypt przykladowy wygląda tak:

function czesc()
{
alert("czesc")
};

opcje = document.createElement("li");
opcje.innerHTML ='<a href="javascript:czesc()">czesc</a>';
var linki = document.getElementById("menuTable");
linki.appendChild(opcje);

Banalny skrypt ale mimo swojej prostoty NIE DZIAŁA!
Przy kliknięciu w link na stronienie wyskakuje komunikat "czesc" a konsola FF wyświetla:

Błąd: czesc is not defined
Plik źródłowy: javascript:czesc()
Wiersz: 1

Pomóżcie bo naszukalem sie rozwiązania caly dzień i nic z tego...

Pozdrawiam.

0

Nie orientuję się za dobrze w skryptach GreaseMonkey, ale jestem prawie pewien, że gdybyś miał porządniejszy kod, to byś ma taki "błąd" nie wpadł. Prawdopodobnie chodzi o to, że funkcje definiowane są w innym "kontekście", czy raczej w innym "okienku" (w innej przestrzeni nazw) niż potem są wywoływane przy kliknięciu (przy linkach javascript "kontekst" jest chyba taki jak by się wpisało kod w pasek adresu przeglądarki, czyli poza wszelkimi ramkami etc.).

Rozwiązaniem jest lepszy kod, bez żadnego JavaScriptu wstawionego po chamsku w HTML i bez pseudoprotokołu JavaScript. Tworzysz sobie dynamicznie (za pomocą DOM) , to stwórz też i dodaj do niego obsługę zdarzenia. Może nawet być prosto i mało elastycznie, czyli "link.onclick = czesc;". Powinno zadziałać.

0

No ja się zgadzam, że kod nie jest piękny ale wybaczcie, uczę się dopiero...

I dzięki za szybką podpowiedź, z onclick wszystko dziala przepięknie:)

Naprawdę wielkie dzięki za pomoc! Jak się zaczyna dopiero pisać to bardzo latwo można się pogubić w ogromie informacji i zapędzić się gdzieś w "kozi róg".

Ten przykladowy poprawiony i dzialający kod podaje niżej bo wiem, że nie tylko ja mialem takie problemy a rozwiązania nigdzie nie widzialem.

function czesc()
{
alert("czesc")
};

opcje = document.createElement("li");
opcje.innerHTML ='czesc';
opcje.onclick=czesc;
var linki = document.getElementById("menuTable");
linki.appendChild(opcje);

Dzięki jeszcze raz za ekspresową pomoc [browar]

0

Trochę nie zrozumiałeś ;). OK, onclick może od biedy zostać podpięty do tego , ale w takim razie wywal to href="javascript:czesc". To już jest zbędne i prawdopodobnie będzie Ci sypało błędami w konsoli.

Czyli:

function czesc() {
  alert("czesc");
  return false; // żeby adres w przeglądarce się nie zmieniał z www.example.com na www.example.com#
};

opcje = document.createElement("li");
opcje.innerHTML ='<a href="#">czesc</a>'; // jak łącze jest do nie-wiadomo-czego, wstawiamy w href po prostu znak #
opcje.onclick = czesc;
var linki = document.getElementById("menuTable");
linki.appendChild(opcje);
0

Tak tak. Z pośpiechu zapomnialem wywalić te javascript ale poprawiem tow czasie jak pisaeś post :-P

W każdym razie dziala juz jak powinno. Bedę teraz walczyl dalej [green] .

Pozdrawiam ;-)

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