JS -> javascript:funkcja(tablica)

0

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

0

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ś ..

0

Moim zdaniem musisz odwołać się do wszystkich wyrazów tablicy, a nie samej tablicy.
I tak jak poprzednik polecam uŻyć pętli

0

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ć...

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