[js] getElementsByName w IE

0

mam taki kodzik:

<script language="JavaScript" type="text/javascript">
function ile(name) {
    var tab = document.getElementsByName(name);
    alert(tab.length);
}
</script>

<input name="test1" type="text" value="">
<input name="test1" type="text" value="">
<input name="test1" type="text" value="">
<br /><br />
<b name="test2">Test</b><br />
<b name="test2">Test</b><br />
<b name="test2">Test</b><br />
<b name="test2">Test</b><br />
<br />
<input type="button" value="Test 1" onclick="ile('test1')">
<input type="button" value="Test 2" onclick="ile('test2')">

Teraz pytanie jak zrobic zeby pod IE dzialalo poprawnie??
Test 1 daje wynik 3, ok
Test 2, pod IE 0, pod FF 4 - czyli poprawnie

Nie moge ustawic id, bo jest ono juz uzywane do innych celow. A jesli obiekt (w tym przypadku B) nie "obsluguje" atrybutu name, to getElementsByName w IE szuka po id a nie po name...

Jesli mam bardzo duzo takich elementow na stronie, to pobieranie wszystkich i sprawdzanie recznie, bedzie... "bardzo szybkie"

0

To takie pytanie, do jakich "innych celów" używasz id, skoro właśnie do tego służy, by jednoznacznie identyfikować dany element?

0

ja już zapomniałem że name można używać poza formularzami ...

Adam.Pilorz napisał(a)

To takie pytanie, do jakich "innych celów" używasz id, skoro właśnie do tego służy, by jednoznacznie identyfikować dany element?

a czy on chociaż name użył jako jednoznacznego zidentyfikowania elementu ? ;)

0

E... Faktycznie, nawet nie jest jednoznaczne.

0

o mamusiu.... 8-|

wlasnie "inne cele" to identyfikowanie konkretnych elementow, jednosnacznie!!
Mam kilkanasice obiektow (np tabelek) i do kazdej odpowiadajaca nazwe, jak klikne na nazwe pojawi mi sie ta tabelka, wiec nazwa na ktora klikam i tabelka sa powiazane po ID...
A teraz potrzebuje zrobic male filtrowanie i przeszukac WSZYSTKIE tabelki, jesli odpowiadaja kryteria, pozostawiam je, jesli nie, to zmieniam kolor na czerwony (to przyklad)

Takze wiem jak dobrac sie do elementu (jednego) ale jak dobrac sie do pewnej tablicy obiektow, tak jak robi to wlasnie getElementsByName, i pod FF dzialalo by to dobrze, ale pod IE nie...

0

Hmm... Strzelam trochę, ale może IE nie obsługuje name dla elementów innych niż pola formularza? Spróbuj dać "alert(document.innerHTML);" w onload (albo onclick jakiegośelementu) i zobacz, co się pokaże. Powinno się pokazać już po "przepuszczeniu" przez przeglądarkę, czyli to co widzi w modelu DOM tak zgrubsza.

0
Adam.Pilorz napisał(a)

"alert(document.innerHTML);"

document.body.innerHTML, ale to nic nie daje, bo IE przyjmuje atybuty nawet jak bys napisal

<b cos_mojego="text :D" onclick="alert(this.cos_mojego)">kliknij na mnie</b>

Co oczywiscie nie dziala pod FF ;)
pod obiema dziala this.attributes.cos_mojego.value

A co do "przyjmowania" przez IE name, to niezupelnie, przyjmowac przyjmuje, ale przy "szukaniu" przez getElementsByName, bierze tylko "wybrane" obiekty, ktore wg niego moga miec taki parametr, inne szuka po ID [glowa]
ale jak to obejsc ;(

0

Z tego co pamiętam to w IE inaczej się trochę tego używało,
było coś w stylu:

                     if( document.getElementsByTagName)
                         var x = document.getElementsByTagName('DIV');
                         else
                         var x = document.all.tags('DIV'); //ta linijka wykonywala sie w IE właśńie

Wiem, że tu jest tagName, ale to jest tylko przykład i może Cię naprowadzić...

0

Dlaczego nie dziala przeczytasz na stronie: http://jszen.blogspot.com/2004_07_01_jszen_archive.html - patrz: " What's in a NAME?". Jak to obejsc znajdziesz na stronie: http://code.dreamincode.net/snippet293.htm . Nie jest to obejscie rewelacyjne, ale dziala.

1 użytkowników online, w tym zalogowanych: 0, gości: 1