paxton
22.06.2009, 15:11:12
Witam.
Otóż mam taki problem, posiadam siatkę zbudowana z komórek w tabelce, każda komórka ma dodatkowe atrybuty x="" i y="" teraz chce zrobić tak, aby po kliknięciu na guzik wywołała się funkcja, która doda 30 do tych atrybutów wiec jeśli x to 20 to po dodaniu będzie 50.
Próbowałem to robić na kilka sposobów lecz się nie udaje, zawsze Jquery zwraca mi 0 wydaje mi się ze jest tak dlatego ponieważ jest ok. 30 takich samych elementów, chce aby funkcja zmieniła je wszystkie.
Moim sposobem było to:
$("td [id=map]").each( function () {
var posx = $(this).attr('posx');
} );
I dalej funkcja zmieniająca, lecz już tutaj to nie działa ponieważ nie zwraca aktualnych danych.
batman
22.06.2009, 15:16:44
To w końcu jak nazywa się atrybut?
x czy posx ?
paxton
22.06.2009, 15:17:24
Jeden to posx
a drugi to posy
czyli dwie osie
X i Y
batman
22.06.2009, 15:20:49
To jeszcze podaj kod html takiej tabeli (oczywiście nie taki na 5 stron A4) i będziemy mogli Ci pomóc.
paxton
22.06.2009, 15:23:53
<?php
echo "\t\n<td id=\"map\" posx=\"$x\" posy=\"$y\" style=\"background: url('".$data['floor']."');\" onClick='$(this).css(\"background\", \"url(\" + window.item + \")\"); save(\"map".$x.$y."\", ".$data['posy'].", ".$data['posx']."); copy(".$data['floor'].", \"./mapa/map".$x.$y.".gif\");' width=\"32\" height=\"32\" posx=\"".$x."\" posy=\"".$y."\"></td>"; ?>
A tu juz wygenerowany:
<td id="map" width="32" height="32" posy="posy" posx="20" onclick="$(this).css("background", "url(" + window.item + ")"); save("map2417", 17, 24); copy(window.item, "./mapa/map2417.gif");" style="background: transparent url(./items/0.gif) repeat scroll 0% 0%;"/>
batman
22.06.2009, 16:31:36
Sorki, że nie odpisałem od razu. Coś mnie oderwało od komputera.
Kilka rzeczy rzuciło mi się w oczy:
1. Czy masz zdefiniowane kilka elementów o tym samym id (map)?
2. Zamiast dodawać onclick w td użyj do tego jQuery.
3. Nadal nie wiem, w którym momencie pobierasz ten atrybut. Rozumiem, że w funkcji save lub copy?
paxton
22.06.2009, 16:33:38
W zadnej z tych funkcji, jest ona gdzies indziej.
Mam ok ~120 elementow o tym ID.
batman
22.06.2009, 16:37:08
Cytat(paxton @ 22.06.2009, 17:33:38 )

Mam ok ~120 elementow o tym ID.
I w tym tkwi właśnie problem. Id jak sama nazwa wskazuje musi być unikatowy. Zmień na class i powinno zadziałać.
paxton
22.06.2009, 16:39:04
ID jest juz unikatowe.
Wygląda następując:
id="map;32,5"
W tym przypadku pozycja komórki to posx='32' posy='5'
batman
22.06.2009, 16:41:10
Nie napisałeś czy działa.
paxton
22.06.2009, 16:47:19
Nie, nie dziala.
Moglbys mi napisac szablon funkcji:
Po kliknięciu pobiera atrybuty posx i posy ze wszystkich TD.
Bo to jest wlasnie to czego nie moge zrobic.
erix
22.06.2009, 16:50:51
Gotowca? Wolne żarty...
Jak iterować pomiędzy obiektami, to pewnie wiesz; jest to główna funkcja jQ. A co do pobierania pozycji - split.
batman
22.06.2009, 16:55:03
Zgadzam się z przedmówcą. Uzupełnię jedynie jego wypowiedź:
- selektor klasy
- metoda each
- metoda attr
Jeśli nadal nie pobiera poprawnych współrzędnych, to pobierz atrybut id i przy pomocy funkcji, o której napisał ~erix, dobierzesz się do współrzędnych.
paxton
22.06.2009, 16:55:43
Nie gotowca, bo to o co prosze jest jedynie 5% całej funkcji, i nie dosłownie pozycje bo kazda pozycja jest generowana przez PHP w funkcji for()
To jest to co napisalem:
$("td").each (
function() {
window.test = '';
window.test = $(this).attr("posx");
}
);
Dla szybkiego przykladu.
batman
22.06.2009, 17:03:23
Twój kod jest poprawny i musi działać.
Jedyne co przychodzi mi do głowy, to wywołanie funkcji następuje zanim wygenerowane zostanie drzewo dom.
paxton
22.06.2009, 17:35:43
Zwraca undefined.
erix
22.06.2009, 17:58:58
Ok, a jak tę funkcję wywołujesz?
paxton
22.06.2009, 18:39:07
Dobra naprawiłem już

Dodałem po prostu nowe atrybuty name aby wyszukiwało dokładnie te które chce, dzięki za pomoc, dobre to forum
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.