Autor | Zpráva | ||
---|---|---|---|
Milda Profil * |
#1 · Zasláno: 18. 8. 2005, 17:15:55
Dá se nějak zjistit index konkrétního prvku v kolekci? Tedy mám id prvku, který je členem kolekce a chci zjistit jeho index, abych moh dostat ukazatel třeba na další prvek v kolekci (prvek s indexem o 1 vyšším...)
|
||
Fred Profil |
#2 · Zasláno: 18. 8. 2005, 17:52:29 · Upravil/a: Fred
Nevím k čemu to má být? Jsou uvnitř kolekce všechny tagy totožné?
function indexy(){ var kde=document.getElementById('IdKolekce') var co=kde.getElementsByTagName('input')//název tagu člena kolekce for(var i=0;i<co.length;i++){ co[i].setAttribute('rel',i)//nastaví rel od 0 do celkového počtu prvků }} |
||
Milda Profil * |
#3 · Zasláno: 18. 8. 2005, 21:58:15
Dobrý, zatim to chápu, ale teď potřebuju (řeknu přesně o co mi jde): uživatel vstoupí do textového pole a já chci (resp. on to chce), aby po stisku Enter dostal focus další prvek v kolekci (uvnitř kolekce jsou totožné tagy). A protože je hodně formulářů a hodně polí, chtěl bych na to mít alespoň trochu univerzální funkci a nemuset ke každýmu inputu dávat přesný jméno dalšího, na který se má focus přemístit, i když to řešení je. Takhle je mám označený, ale když uživatel do jednoho z nich vstoupí, tak stejně nevim na který pozici v kolekci zrovna je.
Na vysvětlenou, když sem řek zákazníkovi, že musej pro pohyb používat tabelátor a ne Enter jak jsou zvyklí z Wokenních aplikací, tak se mi vysmáli, že program je pro ně a nikoli oni pro něj, což mají ostatně pravdu. Díky |
||
Fred Profil |
#4 · Zasláno: 18. 8. 2005, 22:33:19
No jestli je to ve formu, tak to vidím dost bledě enter ho submitne
|
||
Fred Profil |
#5 · Zasláno: 19. 8. 2005, 00:09:27
No když někdo poradí, jak to přerušit, aby to nedojelo na konec toho pole a tak tohle by mohlo fungovat.
<script type="text/javascript"> <!-- function blockEnter(evt) { //http://www.webreference.com/programming/java_dhtml/chap8/2/ evt=(evt)?evt:event; var charCode=(evt.charCode)?evt.charCode:((evt.which)?evt.which:evt.keyCod e); if(charCode==13||charCode==3){enter();} else{return true;}} function enter(){ var kde=document.getElementById('IdKolekce') var co=kde.getElementsByTagName('input')//název tagu člena kolekce for(var i=0;i<co.length;i++){ if(co[i].focus()) this.nextSibling.focus() }} document.onkeydown=blockEnter //--> </script> <div id="IdKolekce"> <input type="text" /> <input type="text" /> <input type="text" /> <input type="text" /> </div> |
||
Mistr Profil |
#6 · Zasláno: 19. 8. 2005, 00:32:02
Milda + Fred
Pánové, čemu říkáte kolekce? Díky. |
||
Fred Profil |
#7 · Zasláno: 19. 8. 2005, 00:41:47 · Upravil/a: Fred
Pane Mistr v tomto případě poli jestli to není jasné.
|
||
Mistr Profil |
#8 · Zasláno: 19. 8. 2005, 01:24:00
Fred
Já jsem si to myslel, že asi půjde o pole (Array). Děkuji za osvětu. |
||
Milda Profil * |
#9 · Zasláno: 19. 8. 2005, 01:52:42
Fred zkrátka nezklame... nemám to zatim dochytaný, ale připadá mi, že by to mohlo být ono. nextSibling - s tim sem se nesetkal a to bude to co potřebuju. Díky
|
||
Fred Profil |
#10 · Zasláno: 19. 8. 2005, 12:11:44
No mě se to rozchodit nepodařilo. Kdyby to aspoň třeba záviselo na obsahu těch textových polí šlo by to tak, aby se nemuselo mačkat vůbec nic. Třeba ti to pomůže
<script type="text/javascript"> <!-- function nextFocus(){ var kde=document.getElementById('IdKolekce') var co=kde.getElementsByTagName('input') for(var i=0;i<co.length-1;i++){ co[i].onkeyup=function(){ var max=this.getAttribute('maxlength') var next=this.getAttribute('tabindex') if(this.value.length>(max-1)){co[next].focus(); }}}} window.onload=nextFocus //--> </script> <div id="IdKolekce"> <input type="text" size="3" tabindex="1" maxlength="3" /> <input type="text" size="2" tabindex="2" maxlength="2" /> <input type="text" size="3" tabindex="3" maxlength="3" /> <input type="text" size="2" tabindex="4" maxlength="2" /> <input type="text" size="4" tabindex="5" maxlength="4" /> <input type="text" size="3" tabindex="6" maxlength="3" /> </div> |
||
Milda Profil * |
#11 · Zasláno: 19. 8. 2005, 12:41:54
Délka polí je proměnlivá, takže to nechám na ten Enter, ale je fakt, že když přidělím tabindexy odpovídající pozici v kolekci, tak bych se moh chytit toho.
|
||
Fred Profil |
#12 · Zasláno: 20. 8. 2005, 14:19:41
Tohle funguje jen v IE, ale uživatelé ostatních prohlížečů pravděpodobně umí používat tabulátor. Pořád nevím, proč to v Opeře a FF projede až na konec pole.
<script type="text/javascript"> <!-- function blockEnter(evt){//thx http://www.webreference.com/programming/java_dhtml/chap8/2/ evt=(evt)?evt:event; var charCode=(evt.charCode)?evt.charCode:((evt.which)?evt.which:evt.keyCod e); var kde=document.getElementById('IdKolekce') var co=kde.getElementsByTagName('input') for(var i=0;i<co.length;i++){ if(charCode==13||charCode==3){ if(co[i].getAttribute('rel')=='a'){ var dalsi=co[i].getAttribute('tabindex'); if(dalsi){co[dalsi].focus(); }}} else{return true;} }} function fokusy(){ var kde=document.getElementById('IdKolekce') var co=kde.getElementsByTagName('input'); for(var i=0;i<co.length;i++){ var ktery=co[i].getAttribute('type'); if(ktery='text'){ co[i].onfocus=function(){this.setAttribute('rel','a');}; co[i].onblur=function(){this.removeAttribute('rel');this.setAttribute( 'rel','n')}; }}} function init(){document.getElementById('IdKolekce').onkeydown=blockEnter} //addEvent: thx http://www.scottandrew.com/weblog/articles/cbs-events function addEvent(obj,evType,fn){if(obj.addEventListener){obj.addEventListener( evType,fn,true);return true;}else if(obj.attachEvent){var r=obj.attachEvent("on"+evType,fn);return r;}else{return false;}} addEvent(window,'load',init); addEvent(window,'load',fokusy); //--> </script> <div id="IdKolekce"> <input type="text" tabindex="1" /> <input type="text" tabindex="2" /> <input type="text" tabindex="3" /> <input type="text" /> </div> |
||
Časová prodleva: 19 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0