Kurdtt
3.04.2014, 17:06:26
Witam,
Mam funkcję w skrypt.js, która pobiera mi tablicę stringów i chciałbym ją przesłać do całkiem innej funkcji w skrypt2.js w obrębie jednego pliku HTML.
Jak to zrobić? Czy mogę wywoływać funkcję ze skrypt2.js w skrypt.js? Jeżeli tak, to dlaczego nie przesyła mi tej tablicy?
Z góry dziękuje.
trueblue
3.04.2014, 17:08:55
Możesz.
W jaki sposób obecnie je przesyłasz, przekazując jako parametr funkcji?
Kurdtt
3.04.2014, 17:18:18
Skrypt.js:
$("div.Wys").click(function(){
var tablica = [];
var rows= $("#list").jqGrid('getRowData');
for (var i=0 ; i<rows.length ; i++){
var row=rows[i];
tablica[i] = row["miasto"];
}
for (var i=0 ; i<tablica.length ; i++){
alert(tablica[i]);
}
addList(tablica);
});
Skrypt2.js
function addList(listStr) {
//var listArray = listStr.split("\n");
var listArray = listStr;
for (var i = 0; i < listArray.length; ++i) {
var listLine = listArray[i];
...
Chciałem, by po zakończeniu 1 skryptu ze Skrypt.js odpalił się drugi skrypt z Skrypt2.js i przetwarzało później tę tablicę.
trueblue
3.04.2014, 17:26:13
Czy alerty w pętli w skrypt1.js wykonują się?
Kurdtt
3.04.2014, 17:29:01
Tak, wykonują się, natomiast po przesłaniu tablicy nie chcą się wykonywać i zastanawia mnie - dlaczego.
trueblue
3.04.2014, 17:31:45
A funkcja addList jest poprzedzona jakimś kodem, czy to jest początek pliku?
Kurdtt
3.04.2014, 17:37:44
Jest poprzedzona kodem, nawet dużą jego ilością, lecz czy ta tablica nie powinna pójść bezpośrednio do tej funkcji bez względu na wszystko?
Sposób przekazywania rozumiem jest dobry? Jestem nowy, jeżeli chodzi o JS i nie wiem, czy funkcja może wywoływać funkcje z innego pliku, czy raczej zwracać tę tablicę, a później by była przechowywana przez jakiś skrypt napisany w headzie w index.html, by on mógł przekazać tę tablicę funkcji do innego skryptu.
trueblue
3.04.2014, 17:40:04
Sprawdź czy funkcja addList nie jest czasem w funkcji zdarzenia $(document).ready().
Jeśli jest to wyprowadź ją na zewnątrz.
Jeśli jest na zewnątrz, to wywołaj w niej alert(listStr), żeby wiedzieć czy jest wywoływana i czy dostaje odpowiednią tablicę.
Kurdtt
3.04.2014, 17:45:32
Nie jest ani w zdarzeniu $(document).ready(), nie wyświetla alerta w drugim skrypcie, nie mam pojęcia dlaczego. W pierwszym tak, natomiast w drugim nie.
trueblue
3.04.2014, 17:48:50
A funkcja addList jest wywoływana (alert(1) dla testu)?
Sprawdź czy masz gdzieś w kodzie zmienną o takiej samej nazwie jak ta funkcja.
Proponuję też odpalić na Chrome narzędzie developerskie (F12->Zakładka Console), będzie więcej widać.
Kurdtt
3.04.2014, 18:02:42
Ciekawa sprawa, nota bene - dziękuję za tę podpowiedź, bardzo fajnie się na tym pracuje.
Zrobiłem inną rzecz - napisałem w skrypcie drugim prostego alerta:
function wyswietl(){
alert("ABC");
}
a w skrypcie pierwszym, w w/w funkcji napisałem: wyswietl(); i wyskoczył błąd: ReferrenceError: wyswietl is not defined.
Czyli rozumiem, że nie da się tego tak zrobić?
trueblue
3.04.2014, 18:06:21
Da się.
Czy skrypt2.js jest na pewno doczytywany? Sprawdź nazwę w head, sprawdź zakładkę Network (filtr na Scripts), zresztą już w konsoli powinno być widać kiedy jest problem z wczytaniem.
Kurdtt
3.04.2014, 18:11:06
Tak, jest doczytywany, działają inne funkcje oparte na tym skrypcie. Dziwne, że nie może się odwołać do funkcji tam zamieszczonej. Kolejność dołączania skryptów jest ważna?
trueblue
3.04.2014, 18:13:46
Możesz ustawić skrypt2.js przed jakimkolwiek innym skryptem, który go wywołuje.
Chociaż u mnie nie ma to znaczenia.
Kurdtt
3.04.2014, 18:25:31
Szczerze mówiąc, nie wiem dlaczego, ale samo zaczęło działać. Dziękuje ślicznie za poświęcony czas - pozdrawiam.
trueblue
3.04.2014, 18:27:30
Mogło być też tak, że błąd składni w innym miejscu skrypt2.js, co powodowało niemożność wywołania funkcji addList.
Ale jak działa, to działa.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.