Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zależność wielu pól input i select
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
hubson87
Witam mój problem został już po częsci rozwiązany tutaj.


Jeżeli komuś się nie chce czytać to:
Potrzebowałem zrobić pole input zależne od wartości selecta pobierającego opcję z bazy. Kolega jaslanin podał mi taki kod.

Cytat(jaslanin @ 30.03.2011, 08:50:50 ) *
index.php:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
  6. <title>Untitled Document</title>
  7. </head>
  8.  
  9. <body>
  10. <script type="text/javascript">
  11. $(document).ready(function() {
  12.  
  13. $('select.selectField').change(function() {
  14. $.getJSON('ajax.php', {option: $(this).val()}, function(data) {
  15. $('input.inputField').val(data.inputValue);
  16.  
  17. });
  18. });
  19.  
  20. });
  21. </script>
  22.  
  23.  
  24. <select class="selectField">
  25. <option>Wybierz</option>
  26. <option value="opcja 1">opcja 1</option>
  27. <option value="opcja 2">opcja 2</option>
  28. <option value="opcja 3">opcja 3</option>
  29. </select>
  30.  
  31. <input style="width: 300px;" class="inputField" type="text" />
  32.  
  33. </body>
  34. </html>


ajax.php :

  1. <?
  2.  
  3. $option = $_GET['option'];
  4.  
  5. $a = new stdClass();
  6. $a->inputValue = "selected option: $option";
  7.  
  8. echo json_encode($a);
  9.  
  10. ?>


Jednak problem w tym, że mam formularz generowany dynamicznie. I teraz potrzebowałbym, żeby ten kod mógł działać w ten sposób, że przy wyborze danego selecta generowany jest dany input, tzn.
1. Pobieram dana z selecta <select name="sel[x]">
2. Odpowiednim zapytaniem wyciagam potrzebna dana w pliku ajax.php
3.Przesyłam ją z powrotem do formularza i wstawiam w input <input name="inp[x]">. Nie znam się za bardzo na js więc będę wdzięczny za każdą pomoc


jaslanin
Ostatnio o mnie kiepsko z czytaniem ze zrozumieniem, albo u innych z pisaniem do zrozumienia. W każdym razie, czy nie chodzi Ci czasem po prostu o to by ustawić atrybut name dla pola input w zależności od pola select?

name dla pola input możesz ustawić przez: http://api.jquery.com/attr/

przesyłanie kolejnych danych myślę można wykonać analogicznie jak w moim przykładzie który cytujesz.

Podejrzewam chociaż nie jest to tutaj wyraźnie napisane że możesz chcieć by wartość atrybutu pola name pochodziła z atrybutu value pola option.

w takim wypadku wartość pola select można uzyskać używając:

http://api.jquery.com/val/
http://api.jquery.com/change/

tę wartość później wykorzystujesz jako wartość atrybutu name dla pola input, używając do tego funkcji attr
hubson87
Dobra temat nadal aktualny jeśli ktokolwiek tu zagląda ;d

Zoptymalizowałem kod funkcji do takiej postaci i wszystko działa pieknie dopóki formularz tworzony jest statycznie. Problem pojawia się przy tworzeniu formularza w sposób dynamiczny przy użyciu jquery.
I teraz pytanie jak w jquery wyciągnąć indeks danego elemntu ale przy dynamicznym formularzu? Poniżej działająca wersja dla wersji statycznej.

[JAVASCRIPT] pobierz, plaintext
  1. <script type="text/javascript">
  2.  
  3.  
  4. $(document).ready(function() {
  5.  
  6. $('select.sf').change(function() {
  7.  
  8. var z = $("select.sf").index(this);
  9.  
  10.  
  11. $.getJSON('ajax.php', {option: $(this).val()}, function(data) {
  12. $("[name^=jed]").eq(z).val(data.inputValue);
  13. alert(z);
  14. });
  15.  
  16. });
  17. });
  18.  
  19. </script>
[JAVASCRIPT] pobierz, plaintext
jaslanin
myślę że to pomoże: http://api.jquery.com/live/
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.