Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX][JavaScript]Pobieranie wartości z dynamicznego inputa
Forum PHP.pl > Forum > Przedszkole
Puchatek320
Cześć,

Tworzę inputa z treścią przez js

<input name="js_test[]" class="db" type="hidden" id="1" value="mail">
<input name="js_test[]" class="db" type="hidden" id="1" value="test">
<input name="js_test[]" class="db" type="hidden" id="1" value="maks">
<input name="js_test[]" class="db" type="hidden" id="1" value="bartek">

i teraz chciałbym pobrać wszystkie wartości z tych inputów za pomocą ajax i wysłać do skryptu php

  1. if(!empty($_POST['js_test']))
  2. {
  3. foreach ($_POST['js_test'] as $key=>$test_js)
  4. {
  5. $test_js = mysqli_real_escape_string($mysqli,$test_js);
  6.  
  7.  
  8. $query = $mysqli->query("SELECT * FROM test WHERE name like '".$test_js."'");
  9.  
  10. while ($row = $query->fetch_array(MYSQLI_ASSOC)) {
  11. $id_test = $row['id'];
  12. }
  13.  
  14. $upTags = "INSERT INTO films_tags (`id_t`,`imie_id`,`nazwa_id`) VALUES (null, '$id', '$id_test')";
  15. if ($mysqli->query($upTags) === TRUE) ;
  16. }
  17. }


Normalnie ze zwykłego inputa pobieram to tak
var n_short = document.getElementById("n_short").value;

Tutaj próbuje

var multiTag = document.getElementsByName("js_test[]");
i pojawia się
NodeList
TypeError: 'stepUp' called on an object that does not implement interface HTMLInputElement.

I tutaj pojawia się pytanie jak mógłbym to przesłać ajaxem? tak żebym nie musiał modyfikować skryptu php o ile to możliwe.

trueblue
Metoda getElementsByName zwraca listę węzłów (tablicę), więc musisz iterować po niej, aby zostać się do każdego elementu po kolei.
Puchatek320
Ajaxem nie mozna przesłać całej tablicy array tak żeby to obrobić później w php?
nospor
Mozna, ale masz przeslac tablice wartosci z inputow a nie tablice inputow. Temu zrob jak ci powiedziano

I juz tak na marginesie
if ($mysqli->query($upTags) === TRUE) ;
po co dajesz tam IF ktory totalnie nic nie robi?
trueblue
Można.
Wysyłasz ciąg zmiennych: js_test[]=mail&js_test[]=test&js_test[]=maks, itd.
Puchatek320
okey, iteruje po nodelist problem w tym że dalej nie wiem jak pobrać z nich value i zapisać do array tak żeby to przesłać ajaxem?

for (var i = 0; i < multiTag.length; i++) {
console.log(multiTag[i]);

}
trueblue
Skoro multiTag[i] to konkretny element, to wartość jest pod value:
multiTag[i].value
Na podstawie tych wartości tworzysz ciąg jak pokazałem Ci wyżej (podstawiając tam te wartości). Taki query string wysyłasz jako zmienne GET lub POST.
Puchatek320
Nie robię tego w prawidłowy sposób ?
zamiast value konsola pokazuje

NodeList(3) [ input#1, input#2, input#3 ]

  1. var multiTag = document.getElementsByName("js_test[]");
  2.  
  3. for (var i = 0; i < multiTag.values(); i++) {
  4. console.log(multiTag[i].value);
  5. var do_wyslania = multiTag[i].value
  6. }
  7. var odebrane = do_wyslania;


trueblue
A nie dostrzegasz różnicy jak budowałeś wcześniej pętlę, a jak obecnie?
Puchatek320
No tak...

Pytanie jak przypisać całą tablicę do zmiennej do_wysłania?

  1. for (var i = 0; i < multiTag.length; i++) {
  2. console.log(multiTag[i].value);
  3. var do_wyslania = [multiTag[i].value,]
  4. }
  5. console.log(do_wyslania);


ponieważ jeśli użyję zmiennej do_wysłania po za pętlą to wyświetla ostatni wynik co jest normalne i nie wiem jak to obejść żeby w tej zmiennej zamiast już wszystkie wyniki
trueblue
Wartości do tabeli dodaje się metodą push: https://developer.mozilla.org/pl/docs/Web/J...ekty/Array/push
viking
A jeszcze lepiej
https://developer.mozilla.org/en-US/docs/Web/API/FormData
Puchatek320
Skorzystałem z pushed ale zamiast dodawać to tworzy nową tablicę za każdym razem.

pushed = multiTag.push(do_wyslania,);
trueblue
Tablicę deklarujesz przed pętlą, w pętli wstawiasz do tablicy wartość każdego input z pomocą metody push.
Puchatek320
Dziękuje!
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.