Java Posted October 31, 2008 Report Posted October 31, 2008 Bāc, triviāla lieta, pat kauns, ka nezinu, bet nav sanācis veidot uz JavaScript! Tātad, kā lai dabū sekojoši, līdzīgi kā php ir: $foo = "anna"; ${$foo} = "lagzdiņa"; // sanāk, ka izveidojas variablis $anna = "lagzdiņa", ja nemaldos.... Kā to pašu dabūt uz JavaScript?
v3rb0 Posted October 31, 2008 Report Posted October 31, 2008 var foo = "anna"; eval('var '+foo+' = "lagzdiņa";'); alert(anna);
Java Posted October 31, 2008 Author Report Posted October 31, 2008 Tik tāl es pats tiku... Ir vēl viens paņēmiens arī... Bet man tagad interesē sekojoši. Pieņemsim, ka no piemēra, "anna" ir "display". Tagad kā ielikt to iekš: document.getElementById('elem1').style.[te ir tā anna jeb display] = 'none'; ?
Java Posted October 31, 2008 Author Report Posted October 31, 2008 Atklāju, paldies visiem! :) var property = 'display'; var value = 'none'; window['prop'] = property; document.getElementById(id).style[prop] = value;
Java Posted October 31, 2008 Author Report Posted October 31, 2008 Beigās man sanāca itin noderīga JavaScript funkcija darbībā ar elementa style propertijiem - notestēta jau uz 5 populārākajiem pārlūkiem (FF3, IE6, IE7, Opera9.5, Safari3.1.2), varbūt kādam arī noder: function changeStyle(id,property,value) { window['prop'] = property; if (document.getElementById(id)) { if (document.getElementById(id).style[prop]==value) { document.getElementById(id).style[prop]=''; } else { document.getElementById(id).style[prop]=value; } } window['prop'] = undefined; }
andrisp Posted October 31, 2008 Report Posted October 31, 2008 Hm, priekš kam tas window['prop'] ? Un varbūt būtu vērts document.getElementById(id) izpildīt tikai vienu reizi. Un nosaukumu drīzāk toggle nevis change. ;)
Java Posted October 31, 2008 Author Report Posted October 31, 2008 window['prop'] , lai nav jāizpilda eval(). Lab, vari likt arī window['tempProp'] - izskatās precīzāk tomēr... nu jā, var uzrakstīt funkcijas sākumā: var elem = document.getElementById(id); un turpmāk lietot tikai mainīgo elem
andrisp Posted October 31, 2008 Report Posted October 31, 2008 Nesapratu par eval. Šitā jau tak arī darbojas: function toggleStyle(id, property, value) { var el = document.getElementById(id); if (el) { if (el.style[property]==value) { el.style[property]=''; } else { el.style[property]=value; } } }
Java Posted October 31, 2008 Author Report Posted October 31, 2008 Tev taisnība, jopcik, paldies par optimizāciju! Jā, tagad funkcija ir pieslīpēta. Īsti tikai neizprotu vārda toggle pielietojumu?
andrisp Posted October 31, 2008 Report Posted October 31, 2008 toggle nozīmē "slēgāt no vienas vērtības uz otro". Aptuveni tā.
bubu Posted October 31, 2008 Report Posted October 31, 2008 imho toggle nozīmē ko tādu kas mainās - ieslēdzas, izslēdzas, piemēram. Tieši to tava funkcija dara - vai nu uzstāda to value, vai arī nomet nost. change nozīmētu ko tādu, kas vienmēr uzstādītu to vērtību - tb el.style[property] = value; bez ierunām.
andrisp Posted October 31, 2008 Report Posted October 31, 2008 Vispār vēl problēma varētu būt, ka elementam jau ir attiecīgais stils, kas ir uzstādīts stila failā. Tad JS neredz to vērtību. JS redz tikai tās vērtības, kas ir iekš inline style taga, un ko pats ir uzstādījis (JS uzstāda stilu caur inline, tāpēc pats redz).
codez Posted October 31, 2008 Report Posted October 31, 2008 (edited) function toggleStyle(id, property, value) { if(el=document.getElementById(id)) { el.style[property]=(el.style[property]==value?'':value); } } Edited October 31, 2008 by codez
codez Posted October 31, 2008 Report Posted October 31, 2008 function t(i,p,v){if(e=$(i)){e.style[p]=(e.style[p]==v?'':v)}}
andrisp Posted October 31, 2008 Report Posted October 31, 2008 codez, tu izdarīji tieši to, ko es gribēju. Tikai tā IF vietā varēja vēl vienu ternary operātoru. :]
Recommended Posts