Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript]usuwanie wierszy z tabeli po id
Forum PHP.pl > Forum > Przedszkole
Randallmaster
Witam,

Zaczynam dopiero zabawę z jquery i mam mały problem, nie mogę usunąć danego wiersza po id. Moje kody:

Budowa tabeli:

  1. <tbody id="elements">
  2. <tr class="element">
  3. <td name="lp[1]" align="center">1</td>
  4. <td><input name="name[1]" type="text" value="" /></td>
  5. <td></td>
  6. <td></td>
  7. <td></td>
  8. <td></td>
  9. <td></td>
  10. <td align="center">
  11. <button class="button" id="remove" style="margin: 5px 0 5px 0;"/>
  12. <img src="../ikony/usun_lp.png" />
  13. </button>
  14. </td>
  15. </tr>
  16. </tbody>]



Budowa Jquery:

  1. $(document).ready(function() {
  2.  
  3. var lp = 1;
  4. $('#remove').click(function(){
  5. $('#elements .element:td[name="lp['+lp+']"]').remove($('#elements'));
  6. });
  7. });
mortus
Piszesz, że chcesz usunąć wiersz, ale w skrypcie używasz elementu tbody (ciało tabeli, id="elements").
[JAVASCRIPT] pobierz, plaintext
  1. $('#elements .element td[name="lp['+lp+']"]').parent().remove();
[JAVASCRIPT] pobierz, plaintext

Zwróć uwagę, że wyrzuciłem dwukropek z pierwszego selektora i selektor z metody .remove(), bo ten selektor - nie dość, że źle zapisany, to jeszcze sprawia, że .remove() przeszukuje potomków wcześniej wyselekcjonowanych elementów, które mają identyfikator "elements", tymczasem u Ciebie jest to element nadrzędny.
Randallmaster
Zrobiłem takie coś:

  1. $('#remove').click(function(){
  2. var newRow = $('.element');
  3. newRow.find('td[id="lp['+lp+']"]');
  4. newRow.remove();
  5. });


Usuwa ale wszystko sad.gif nie uwzględnia danego wiersza sad.gif
mortus
No cóż, to normalne, bo newRow to wszystkie elementy klasy element. Jeśli miałoby to być w takiej formie, to tak:
[JAVASCRIPT] pobierz, plaintext
  1. $('#remove').click(function(){
  2. var newRow = $('.element');
  3. var rowToRemove = newRow.find('td[id="lp['+lp+']"]').parent();
  4. rowToRemove.remove();
  5. });
[JAVASCRIPT] pobierz, plaintext


PS: Trzeba się zastanowić co dany selektor dokładnie określa. Radzę też korzystać z narzędzi takich jak Firebug dla Firefox-a, bo naprawdę ułatwiają życie.
Randallmaster
No właśnie po to dodaje to:

td[id="lp['+lp+']"]

aby określić dany wiersz i po tym usunąć <tr> o classie .element

kurcze siedzę już z 2 godziny i nic sad.gif

ewentualnie zrobić każdy inny przycisk?
mortus
Przecież Ci napisałem dwa rozwiązania:
[JAVASCRIPT] pobierz, plaintext
  1. // zauważ, że element
  2. $('.element td[name="lp['+lp+']"]') // to ciągle komórka tabeli, czyli HTML-owy <td></td>
  3. // natomiast elementem nadrzędnym (rodzicem) dla tego elementu jest odpowiedni wiersz, HTML-owy <tr></tr>, stąd
  4. $('.element td[name="lp['+lp+']"]').parent().remove(); // zadziała tak, jak trzeba
[JAVASCRIPT] pobierz, plaintext

Zwróć uwagę na to, że używam metody .parent() do wyselekcjonowania odpowiedniego elementu <tr></tr> o klasie element.
Randallmaster
zrobiłem tak jak napisałeś za pierwszym razem i nie działa ;(
mortus
Pokaż cały kod HTML i JS.
Randallmaster
budowa tabeli:
  1. <tbody id="elements">
  2. <tr class="element">
  3. <td id="lp[1]" align="center">1</td>
  4. <td><input name="name[1]" type="text" value="" /></td>
  5. <td></td>
  6. <td></td>
  7. <td></td>
  8. <td></td>
  9. <td></td>
  10. <td align="center">
  11. <button id="remove" class="button" />
  12. <img src="../ikony/usun_lp.png" />
  13. </button>
  14. </td>
  15. </tr>
  16. </tbody>


  1. $('#remove').click(function(){
  2. var newRow = $('#elements');
  3. var rowToRemove = newRow.find('td[id="lp['+lp+']"]').parent();
  4. rowToRemove.remove();
  5. });


Myślałem żeby określić id buttona i to np zrobie bedzie id="remove1" id="remove2" id="remove3" itd. ale i tak nie pobiera danego id="lp"...
gdy wpisze ręcznie
var rowToRemove = newRow.find('td[id="lp[1]"]').parent();
to usunie tylko 1 pozycje a jak wpisze 2 to juz jest blad...



Zrobiłem nawet tak aby poszczególne pozycje ręcznie usunąć, ale nawet wpisując ten kod to tak czy inaczej usuwa mi z przycisku remove1 a remove2 nie działa...

  1. $('#remove1').click(function(){
  2. var newRow = $('.element');
  3. var rowToRemove = newRow.find('td[id="lp[1]"]').parent();
  4. rowToRemove.remove();
  5. });
  6. $('#remove2').click(function(){
  7. var newRow = $('.element');
  8. var rowToRemove = newRow.find('td[id="lp[2]"]').parent();
  9. rowToRemove.remove();
  10. });
mortus
Przecież nie pisałeś, że chodzi Ci właśnie o to. Przykład. Choć sposobów może być tyle ilu programistów.
webdice
Pierwsze co źle robisz to nadawanie ID remove dla buttona który się powtarza. ID musi być unikalne. Zrób coś w rodzaju.

  1. <button class="button remove" />


i w JS:

Kod
$( 'button.remove' ).click( function()
{
  $( this ).parents( 'tr.element' )
    .remove();
});
Randallmaster
webdice zrobiłem tak ale i tak nie działa ;/

$('.button').click(function(){
$(this).parents('tr.element')
.remove();
});

mortus..

Widzę że twój przykład działa, ale musiałbym przebudować dodawanie element_1, a nie można by zanzaczać tr class="element" poprzez funkcje this??
webdice
Wrzuć to na jsfiddle.

EDIT: http://jsfiddle.net/Vv88a/
Randallmaster
http://jsfiddle.net/nQXwc/1/

U mnie działa dodawanie pozycji a tu nie sad.gif
webdice
To co Ty wymyśliłeś jest bez sensu. Zrób tak jak Ci napisałem.
Randallmaster
Zrobiłem tak jak mi pisałeś:

Przycisk z class="button"
  1. <button class="button" >
  2. <img src="../ikony/usun_lp.png" />


Kod js

  1. $( '.button' ).click( function()
  2. {
  3. $( this ).parents( 'tr.element' )
  4. .remove();
  5. });


i nie działa
webdice
Co jest człowieku z Tobą? Myślisz że jestem wróżką i potrafię wróżyć z kawałku kodu? Klej to na jsfiddle.
Randallmaster
sorry ale już długo się nad tym męczę sad.gif

tam jest dodawanie i usuwanie pozycji.
u mnie działa dodawanie nie wiem czemu tutaj nie

http://jsfiddle.net/KByAv/
webdice
Cytat(Randallmaster @ 30.12.2012, 14:50:29 ) *
sorry ale już długo się nad tym męczę sad.gif (...)


To Cię nie zwalania z myślenia.

Cytat(Randallmaster @ 30.12.2012, 14:50:29 ) *
(...) u mnie działa dodawanie nie wiem czemu tutaj nie
http://jsfiddle.net/KByAv/


Nie dołączyłeś jQuery (po lewej masz wybór biblioteki). Skoro działa to co jeszcze chcesz?
Randallmaster
AAAAAAAAAAA smile.gif

wybrałem biblioteke:

http://jsfiddle.net/KByAv/2/

I teraz tak przycisk dodaj pusta pozycje dziala,

ale nie działa przycisk usuń
webdice
jQuery live.
zegarek84
http://jsfiddle.net/KByAv/7/
update indeksów i nazw dorobisz se ;]
webdice
~zegarek84 produkujesz takich bezmyślnych programistów których trzeba przy najprostszych sprawach prowadzić za rączkę, a za kilka miesięcy/lat klient wybierze takiego bo jest tańszy.
Randallmaster
ja akurat nie zostawię tego kodu przez niczego przeanalizuję go i wyciągnę wnioski.
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.