hej, mam nastepujacy problem
w programie z ponizszymi liniami jest wszystko ok,
document.write("<A href='javascript:funkcja("" + tablica[3] + "")' cos </a>")
function funkcja(napis)
{ }
ale ja zamiast przekazywania jednego pola z talicy chcialbym przekazac cala tablice, ale nie moge, bo jak napisze
document.write("<A href='javascript:funkcja(tablica)' cos </a>") to mi wywala, ze brak definicji tablica :/
a jak tak:
document.write("<A href='javascript:funkcja("tablica")' cos </a>") to tez zle, bo oczekiwanym znakiem byl ')'
w zaden sposob nie moge sobie z tym poradzic, thx za wszystkie odpowiedzi
bo załóżmy że masz tablicę stringów ['a', 'b', 'c', 'd']
dając
document.write("<A href='javascript:funkcja("" + tablica[3] + "")' cos </a>")
do dokumentu wpisuje się:
<A href='javascript:funkcja("d")' cos</a>
nie wiem gdzie tu masz zamknięcie tagu otwierającego ale nieważne
a jak dajesz:
document.write("<A href='javascript:funkcja(tablica)' cos </a>")
to wychodzi:
<A href='javascript:funkcja(tablica)' cos</a>
czyli po kliknięciu jest wywołany kod funkcja(tablica) a tablica nie jest pewnie dostępna w dokumencie, więc albo ją "udostępnij globalnie" albo przepisz pętlą całą tablicę, czyli kod który da:
<A href='javascript:funkcja(['a', 'b', 'c', 'd'])' cos </a>
nie wiem czemu nie zamykasz tego tagu ale może to zamierzone jakieś ..
Moim zdaniem musisz odwołać się do wszystkich wyrazów tablicy, a nie samej tablicy.
I tak jak poprzednik polecam uŻyć pętli
Zaciekawiło mnie to pytanie, ja bym to rozwiązał tak:
(oczywiście byłoby 100 razy szybciej gdyby we wszystkich przeglądarkach działało Object.toSource() ale tak nie jest...)
Object.prototype.asString = function() {
var obj2str = function(obj) {
var type = typeof obj, ret = '';
if (type == 'string') {
obj = obj.replace(/([\'\"\\])/g, '\\$1');
obj = obj.replace(/\r/g, '\\r').replace(/\n/g, '\\n');
ret = "'" + obj + "'";
}
else if (type == 'object') {
var tmp = [];
if (obj.constructor == {}.constructor) {
for (var v in obj) {
tmp[tmp.length] = v + ':' + obj2str(obj[v]);
}
ret = '{' + tmp.join(',') + '}';
}
else if (obj.constructor == [].constructor) {
for (var i = 0; i < obj.length; i++) {
tmp[tmp.length] = obj2str(obj[i]);
}
ret = '[' + tmp.join(',') + ']';
}
}
else {
ret = obj.toString();
}
return ret;
}
return obj2str(this).replace(/[^a-z0-9]/ig, function(c) {
return '-' + c.charCodeAt(0) + '-';
} );
}
String.prototype.asObject = function() {
var str = this.toString();
str = str.replace(/-([0-9]+)-/g, function(b, c) {
return String.fromCharCode(c);
} );
try {
eval('var obj = ' + str + ';');
}
catch (e) {
var obj = {};
}
return obj;
}
//---
function pokaz_tablice(str) {
var tab = str.asObject();
for (var i = 0; i < tab.length; i++) alert(tab[i]);
}
function napisz_link() {
var tab = ['kon', 'slon', 'krowa', 'koza'];
document.write('<a href="javascript:pokaz_tablice(\'' +
tab.asString() + '\')">Pokaz tablice</a>');
}
napisz_link();
kodu nie przetestowałem na wszelkie możliwości, może coś nie działać...