Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Jquery] Zmiana atrybutu.
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
paxton
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
To w końcu jak nazywa się atrybut?
x czy posx ?
paxton
Jeden to posx
a drugi to posy

czyli dwie osie
X i Y
batman
To jeszcze podaj kod html takiej tabeli (oczywiście nie taki na 5 stron A4) i będziemy mogli Ci pomóc.
paxton
  1. <?php
  2. 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>";
  3. ?>


A tu juz wygenerowany:
  1. <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
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
W zadnej z tych funkcji, jest ona gdzies indziej.

Mam ok ~120 elementow o tym ID.
batman
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
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
Nie napisałeś czy działa.
paxton
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
Gotowca? Wolne żarty...

Jak iterować pomiędzy obiektami, to pewnie wiesz; jest to główna funkcja jQ. A co do pobierania pozycji - split.
batman
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
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
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
Zwraca undefined.
erix
Ok, a jak tę funkcję wywołujesz?
paxton
Dobra naprawiłem już smile.gif

Dodałem po prostu nowe atrybuty name aby wyszukiwało dokładnie te które chce, dzięki za pomoc, dobre to forum smile.gif
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.