Autor Zpráva
Milda
Profil *
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
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 *
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
No jestli je to ve formu, tak to vidím dost bledě enter ho submitne
Fred
Profil
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
Milda + Fred

Pánové, čemu říkáte kolekce?
Díky.
Fred
Profil
Pane Mistr v tomto případě poli jestli to není jasné.
Mistr
Profil
Fred
Já jsem si to myslel, že asi půjde o pole (Array). Děkuji za osvětu.
Milda
Profil *
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
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 *
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
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>
Toto téma je uzamčeno. Odpověď nelze zaslat.

0