Sasa Posted January 14, 2008 Report Posted January 14, 2008 Ir lejupkrītošais <select> objekts. Nekādi ar JS nesanāk izvadīt selectoto vērtību, ja izmantoju value izvadāmais ir undefined, bet ja izmantoju innerHTML tad man zvadās pilnīgi viss select saturs ar visiem izvēlamajiem! Kā es ar alert varu izvadīt selecēto vērtību?
andrisp Posted January 14, 2008 Report Posted January 14, 2008 Šis ir labs resurs, kad piemirstas: http://www.quirksmode.org/js/forms.html#value http://www.quirksmode.org/js/forms.html#sselect Tā kā value vajadzētu strādāt, bet tev vienkārši kods līks. No offence, protams. ;)
GedroX Posted January 14, 2008 Report Posted January 14, 2008 Man jau liekās, ka value būtu jāstrādā. Cits variants ir izmantojot selectedIndex -- el.options[el.selectedIndex].value.
marcis Posted January 14, 2008 Report Posted January 14, 2008 <select name="test" onchange="alert(this.value);"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> nestrādā?
Sasa Posted January 14, 2008 Author Report Posted January 14, 2008 tiku galā! bet tikai es to selectu izveidoju izmantojot šito kā paraugu! http://www.rodsdot.com/ee/readFileClientSide.asp
andrisp Posted January 14, 2008 Report Posted January 14, 2008 Tur taču parasts selekts, tikai atšķirība tāda, ka tiek ģenerēts JS pusē.
Sasa Posted January 14, 2008 Author Report Posted January 14, 2008 ar to viss ir kārtība! bet tagad kā es varu savā selectā nerādīt dublējošos ieraksstus?
Sasa Posted January 14, 2008 Author Report Posted January 14, 2008 dati nenāk no datu bāzes dati nāk no texta faila!
Lynx Posted January 14, 2008 Report Posted January 14, 2008 Tad tev jataisa pašam kāds risinājums. Es nezinu kā ar performance, bet es darītu šādi: Noteikti tev katram ierakstam ir id, šo te id izvadot ierakstu liec iekšā array. Pēc tam katru nākamo ierakstu izvadot pārbaudi vai tā ieraksta id atrodas jau augstāk minētajā array. Ja neatrodas, izvadi un ieliec tikko izvadīta ieraksta id array, ja atrodas ej uz nākamo ierakstu.
Sasa Posted January 15, 2008 Author Report Posted January 15, 2008 Šis kods man izveido sarakstu, ar ko man papildināt viņu, lai es neredzētu dublējošos ierakstus! function makeList() { if (xmlhttp.readyState==4) { if (xmlhttp.status==200) { var tmpArr=xmlhttp.responseText.split('\n'); var out='<select id=selekts name="states" size="1">'; var tmp; var val; var txt; for (var idx=1;idx<tmpArr.length;idx++) { tmp=tmpArr[idx].split(','); val = tmp[3].replace('"',''); val = val.replace('"',''); txt = tmp[3].replace('"',''); txt = txt.replace('"',''); out += '<option value="'+val+'">'+txt+'</option>'; } out += '</select>'; document.getElementById('theExample').innerHTML=out; } } }
Aleksejs Posted January 15, 2008 Report Posted January 15, 2008 Varbūt ieliec outputu, ko saņem skripts no: var tmpArr=xmlhttp.responseText.split('\n'); Citādi baigi negribās iedziļināties, kā tas viss izskatās. Bet aptuvenā recepte - vispirms tajā for ciklā liec iekšā masīvā, pārbaudot, vai tāds val jau nav ielikts. Ja ir ielikts, tad izlaižam no masīva. Un pēc tam to masīvu sabāžam optionu listē.
bubu Posted January 15, 2008 Report Posted January 15, 2008 Nevajag masīvā. Masīvs ir lēns - O(n). Vajag dictionarijā likt: var all = {}; for (var idx=1;idx<tmpArr.length;idx++) { var tmp=tmpArr[idx].split(','); var val = tmp[3].replace('"','').replace('"',''); var txt = txt = tmp[3].replace('"','').replace('"',''); all[val] = txt; } for (var val in all) { out += '<option value="'+val+'">'+all[val]+'</option>'; } Ja grib drusku ātrāku kodu (ar vienu ciklu), tad optionus var veidot uzreiz jau liekot all objektā to val vērtību. Tik tad gan jāpārbauda vai tur jau priekšā nav tā pati vērtība. Un vispār - HTML'u konkatenēt no stringiem nav smuki. Tam ir izdomātas DOM funkcijas (createElement, appendChild, ...)
Sasa Posted January 15, 2008 Author Report Posted January 15, 2008 paldies! strādā kā nākas tagad! Bet nesaprotu dažas nianses: var all = {}; var txt = txt = tmp[3].replace('"','').replace('"',''); for (var val in all) all[val] = txt;
bubu Posted January 15, 2008 Report Posted January 15, 2008 1) var all = {}; ir ekvivalents pierakstam var all = new Object(); 2) tur nokļūdījos kopējot tavu kodu. Pareizi jābūt šādi: var txt = tmp[3].replace('"','').replace('"',''); 3) parasts cikls pa visiem elementiem. Ekvivalents php ciklam foreach ($all as $val). 4) dictionary ir līdzīgs masīvam. Masīvam tu raksti masīvs[indekss] = vērtība. Un indekss var būt tikai vesels nenegatīvs skaitlis. Dictionarijam tiek rakstīts dict[atslēga] = vērtība, kur atslēga var būt jebkas - gan strings, gan integers, gan jebkurš objekts (JS, DOM, ...)
Recommended Posts