getByName - nie działa tak jakbym chciał

0

Witam,
Usiłuję napisać skrypt, który wyedytuje mi dane konkretnej pozycji na liście.
Lista jest generowana z bazy danych w oparciu o zwykłe listowanie:

for ($i=0; $i <$ile_znalezionych; $i++){
$wiersz = mysqli_fetch_assoc($wynik);
$id=stripslashes($wiersz['id']); 
echo "<input type='hidden' name='numer' value =".$id.">";
echo "<button class='button buttonEdytuj' onclick='edytuj()'>Edytuj</button>";
}

Jak widać na stronie może pojawić się 10 albo i 500 przycisków i chodzi mi o to, by poprzez JavaScript wychwycić, czy został naciśnięty przycisk przy 10 czy 50 ofercie.
Skrypt JS wygląda w sposób następujący:

function edytuj(){
	alert('Edytować?.');
	var numer = document.getElementsByName("numer")[0].value;
	var formdata = new FormData();
	formdata.append("numer", numer);
	var ajax = new XMLHttpRequest();
	ajax.addEventListener("load", completeHandler, false);
	ajax.open("POST", "panel/edytowanie.php");
	ajax.send(formdata);
	}
function completeHandler(event){
	_("wyniki").innerHTML = event.target.responseText;
}

Niestety - za każdym razem wychwytuje id jakie było w pierwszej iteracji.
Jakaś podpowiedź?

0

Nie rozumiem, chyba. Przecież w kodzie masz

var numer = document.getElementsByName("numer")[0].value;

gdzie to "[0]" oznacza, że zawsze pobierasz pierwszy dopasowany element. document.getElementsByName("numer") pobierze wszystkie dopasowane elementy, Ty przez [0], odwołujesz się do pierwszego z nich.

Może do funkcji edytuj dodać zmienną "i". i potem document.getElementsByName("numer")[i].value;

for ($i=0; $i <$ile_znalezionych; $i++){
$wiersz = mysqli_fetch_assoc($wynik);
$id=stripslashes($wiersz['id']); 
echo "<input type='hidden' name='numer' value =".$id.">";
echo "<button class='button buttonEdytuj' onclick='edytuj(i)'>Edytuj</button>";
}

JS:

function edytuj(i){
    alert('Edytować?.');
    var numer = document.getElementsByName("numer")[i].value;
    var formdata = new FormData();
    formdata.append("numer", numer);
    var ajax = new XMLHttpRequest();
    ajax.addEventListener("load", completeHandler, false);
    ajax.open("POST", "panel/edytowanie.php");
    ajax.send(formdata);
    }
function completeHandler(event){
    _("wyniki").innerHTML = event.target.responseText;
}

Albo pomyśleć nad jakimś lepszym rozwiązaniem. Ubrać tego inputa i buttona w jakiegoś div (wrappera). i tak kombinować.

0

Niestety nie działa.
Za każdym razem pobiera drugi element (dlaczego drugi a nie pierwszy czy ostatni? Nie mam pomysłu).
Co masz na myśli pisząc: "Albo pomyśleć nad jakimś lepszym rozwiązaniem. Ubrać tego inputa i buttona w jakiegoś div (wrappera). i tak kombinować."?

0

Poprawiłem echo "<button class="button buttonEdytuj" onclick="edytuj(i)">Edytuj</button>"; na echo "<button class="button buttonEdytuj" onclick="edytuj(&quot;.$i.&quot;)">Edytuj</button>"; i POSZŁOOO Wielkie dzięki.

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