Autor Zpráva
lestor
Profil
Zdravim
Mám víceřádkový formulář, ze kterého potřebuji předávat proměnné přes ajax do php a zpět.
Problém je v tom, že nemohu přijít na to, jak předat proměnnou z konkrétní části formuláře a vrátit ji upravenou zpět do konkrétní části.
Tady je stručná část kódu javascript. Myslím že není třeba to sem psát celý.

function vyhledej_kategorii(kategorie){
  var vyhledana=document.getElementById(vyhledej_id[kategorie]).value; 
}

Tady je část formuláře kterým volám funkci
<input name="vyhledej_id[1]" id="vyhledej_id[1]" onkeyup="javascript:vyhledej_kategorii(1)" type="text">

<input name="vyhledej_id[2]" id="vyhledej_id[2]" onkeyup="javascript:vyhledej_kategorii(2)" type="text">

Cílem tedy je, abych do proměnné "vyhledana" dostal obsah formuláře input a věděl přitom, k jakému ID přísluší, abych mohl výsledek opět k příslušnému ID vrátit. Samozřejmě mi nejde o dva formulářové řádky, ale potřebuji aby byla funkce použitelná pro libovolný počet řádků.

Nefunguje mi na tom především získávání proměnné "document.getElementById(vyhledej_id[kategorie]).value" ale nevím jak jinak ji získat.
Proměnná "kategorie" se mi vrací, vyhledej_id se vrací (není li pole), ale v případě že ji zapisuji takto jako pole, pak mi nefunguje.

Jsem v javascript úplný začátečník. Díky za radu, už si s tím hraju druhý den :-(
Joker
Profil
lestor:
V principu správně, jen tam chybí uvozovky kolem řetězců:

document.getElementById("vyhledej_id[" + kategorie + "]").value;
lestor
Profil
Díky za radu, ale stále mi to nejde.
Musím tam v tom případě mít ještě další chybu :-|
Tady je celý javascript:
<script type="text/javascript" language="javascript">//<![CDATA[
function vyhledej_kategorii(kategorie){
  var http_request=false;
  var vyhledana=document.getElementById("vyhledej_id[" + kategorie + "]").value; 
  var request="kategorie="+kategorie"&vyhledana="+vyhledana; 
  if(window.XMLHttpRequest){
    http_request=new XMLHttpRequest();
  }
  else if(window.ActiveXObject){
    try{http_request=new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch(eror){
      http_request=new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
  
  http_request.onreadystatechange=function(){
    zpracuj(http_request);
  };
  http_request.open('POST','components/com_mojerccomponent/mojerc_ajax.php',true);
  http_request.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  http_request.send(request);
}

function zpracuj(http_request){
  if(http_request.readyState==4){
    if(http_request.status==200){
      document.getElementById("vysledek[" + kategorie + "]").innerHTML=http_request.responseText; 
    }
    else{
      alert('Chyba');
    }
  }
}
//]]></script>

a tady je část html
<form name='zadani' action='/administrator/index.php?option=com_mojerccomponent' method='post' >

<input type='text' name='vyhledej_id[1035]' id='vyhledej_id[1035]' onKeyUp='javascript:vyhledej_kategorii(1035)' >
<p id='vysledek[1035]'></p>

<input type='text' name='vyhledej_id[923]' id='vyhledej_id[923]' onKeyUp='javascript:vyhledej_kategorii(923)' >
<p id='vysledek[923]'></p>
 
</form>
lestor
Profil
Takže nikdo si s tím neví rady?
Nějak se to přece musí dát řešit :-(
Pokud by mi někdo poradil, nemám problém zaplatit konzultaci.
Kdyžtak mi napište.
_es
Profil
lestor:
Premenná kategorie je lokálna premenná funkcie vyhledej_kategorii, preto nemôže byť dostupná z funkcie zpracuj. Na čo vyhľadávaš element podľa id, keď ho máš priamo dostupný v this? Do elementu onkeyup nepatrí to javascript:, aj keď to nespôsobí chybu. Udalosť onkeyup nemusí zachytiť všetky zmeny - čo keď sa vloží obsah pomocou myši?
lestor
Profil
_es:
Nakonec jsem zjistil, že základem chyby bylo chybějící plus zde:
'var request="kategorie="+kategorie"&vyhledana="+vyhledana;'
Jinak to už funguje podle představ :-)
I tak moc díky za pomoc.
_es
Profil
lestor:
Jinak to už funguje podle představ :-)
Chybu v 28. riadku (neexistujúca premenná kategorie) si však musel opraviť tiež, nie?
lestor
Profil
_es:
jj to jsem zapoměl zmínit.
proměnnou jsem přidal do funkce "zpracuj(http_request,kategorie)" na řádku 18 a 25 :-)

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: