[ krul @ 15.05.2006. 17:22 ] @
Na asp.net stranici imam dve data grid controle.
Svaka data grid kontrola ima u svom zacelju Select All/Diselect All check box.
Sledeci java script funkcionise kad je na formi samo jedna data grid kontrola, ali sa dve data grid kontrole ta skripta selektuje redove na obe data grid kontole sto je nepozeljno:
Code:

 function SelectAllCheckboxes(spanChk)
        {
            var xState=spanChk.checked;
            var theBox=spanChk;
    
            elm=theBox.form.elements;
            for(i=0;i<elm.length;i++)
            {
                if(elm[i].type=="checkbox" && elm[i].id!=theBox.id)
                {
                    if(elm[i].checked!=xState)
                        elm[i].click();
                }
            }
        }


Ima li iko predlog za neko jednostavno resenje gde bi bio u stanju da cekiram samo redove u data grid kontroli koja je inicirala select all/ Diselect all proces?

Hvala
[ noviKorisnik @ 16.05.2006. 08:44 ] @
Pitanje je kakav ti HTML generiše ta kontrola. (ja se ne čačkam s asp.net, ali bilo bi dobro da ostaviš deo koda formulara s generisane stranice ... odnosno okači celu generisanu stranicu uz poruku)

Suština je da se obe kontrole nalaze u istom formularu, a funkcija postavlja stanje na svim čekboksevima u formularu.

... no hajde kači HTML, pa da se prilagodi funkcija ...
[ Br@nkoR @ 16.05.2006. 17:05 ] @
Pošto su checkbox-ovi u različitim tabelama i pritom id checkbox-a počinje sa id tabele, možeš umesto:
Code:

elm=theBox.form.elements;

staviti:
Code:

elm = document.getElementById(theBox.id.replace(/([a-z_]+)_(.+)/i,'$1')).getElementsByTagName('input');

A možeš taj id tabele prosleđivati i kao argument funkcije SelectAllCheckboxes, npr
Code:

SelectAllCheckboxes2(spanChk, elemID)

a poziv npr.
Code:

onclick="SelectAllCheckboxes2(this, 'dgStudentsWithoutClass');

A za elm staviš:
Code:

elm = document.getElementById(elemID).getElementsByTagName('input');


A možeš kreirati (kao što si pokušavao) novu funkciju koja će "hvatati" parent tabelu, npr.
Code:

function getParentLayer(elem) {
  while(elem.tagName.toLowerCase() != 'table') {
    elem = elem.parentNode;
  }
  return elem;
}

pa za elm staviti:
Code:

elm = getParentLayer(spanChk).getElementsByTagName('input');


i još brojne mogućnosti...
[ krul @ 16.05.2006. 17:37 ] @
Wow, Ovo bi nazvao sveobuhvatnim odgovorom.

Branko, puno hvala. Implementirao sam ovu zadnju soluciju (koju sam neuspesno pokusavao).
I RADI.

Zakljucak:
Nekako intuitivno sam pokusavao da (parent tablu) tretiram kao kontejner (slicno formi) s tim da isfiltriram checkbox controle. Ono sto mi je falilo je razumevanje sledeceg metoda ".getElementsByTagName"

Znaci na svaki html element koji moze biti kontejner, kao sto je npr tabla ja mogu da upotrebim taj metod i dobijem niz kontrola (u zavisnosti od tag imena) koje taj kontejner poseduje.

Jos jednom puno hvala, (Ulepsao si mi dan