Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][PostgreSQL][PHP] Kopiowanie textboxa
Forum PHP.pl > Forum > Przedszkole
Lynx
Cześć,
pisałem sobie prosty serwis i w jednym miejscu stwierdziłem że całkiem fajnie sprawdziłyby się dynamiczne podpowiedzi a'la google. Skorzystałem więc z gotowego rozwiązania opisanego na tym blogu: http://www.gogolkiewicz.pl/dynamiczne-podp...-w-stylu-google. Lekko to zmodyfikowałem żeby pasowało do postgresa i mojej bazy i udało mi się zaimplementować. Jednak mam teraz ogromny problem - rekordów które użytkownik może tworzyć za pomocą strony będzie dość zróżnicowana ilość - od 1 do około 100, zatem najlepiej byłoby to zrobić w taki sposób, aby za pomocą buttona dodawać kolejne pola tekstowe z możliwością wpisania kolejnych danych. Czy da się w jakiś łatwy sposób za pomocą JS 'klonować' takie pola? Chodzi mi o to, żeby pozostałe nie różniły się niczym od tego jednego, poza polem name (dane przesyłam dalej POSTem więc potrzebuję je jakoś rozróżniać). Wiem jak dodawać dynamicznie zwykłe pola do formularza, ale ten kod zdecydowanie mnie przerósł.

Skrypty:
  1.  
  2. <script type="text/javascript">
  3. <!--
  4. $(document).ready(function(){
  5. $("#search").live('keyup', function(){
  6. var search = $("#search").val();
  7. if(search == '') {
  8. $("#results").hide();
  9. } else {
  10. $.get('podpowiedzi.php?action=search&search=' + search, function(data){
  11. $("#results").html(data);
  12. $("#results").show();
  13. });
  14. }
  15. });
  16.  
  17. $(".result-list").live('click', function(){
  18. $("#search").val($(this).html());
  19. $("#results").hide();
  20. });
  21.  
  22. $("#close").live('click', function(){
  23. $("#results").hide();
  24. });
  25. });
  26. -->
  27.  
  28.  
  29. <style type="text/css">
  30. input#search {
  31. font: 12px courier;
  32. padding: 10px;
  33. border: 1px solid black;
  34. width: 200px;
  35. }
  36. div#results {
  37. margin-top: -3px;
  38. border: 1px solid gray;
  39. width: 220px;
  40. }
  41. a.result-list, #close {
  42. font: 12px courier;
  43. padding-top: 3px;
  44. padding-bottom: 3px;
  45. padding-left: 10px;
  46. padding-right: 10px;
  47. display: block;
  48. }
  49. a.result-list:hover {
  50. background-color: #dddddd;
  51. }
  52. </style>

Pole tekstowe:
  1. <input type="text" id="search" name="zespol" />
  2. <div id="results" style="display: none;"></div>


podpowiedzi.php (do tego pliku się odwołuję w js)
  1. <?php
  2.  
  3. $dbconn = pg_connect("host=localhost dbname=mjekot user=mjekot password=dupa")
  4. or die("Nie można się połączyć");
  5.  
  6. if($_GET['action'] == 'search') {
  7. $ret = '<div id="close" style="color: #0000ff; text-decoration: underline; text-align: right;">Zamknij</div>';
  8. $search = trim($_GET['search']);
  9. $query = pg_query("SELECT nazwa FROM zespoly WHERE UPPER (nazwa) LIKE UPPER ('%".pg_escape_string($search)."%')");
  10. while($row = pg_fetch_assoc($query)) {
  11. $ret .= '<a class="result-list">'.$row['nazwa'].'</a>';
  12. }
  13. die($ret);
  14. }
  15.  
  16. ?>


CuteOne
Rozwiązanie jest dość banalne smile.gif zamiast odwoływać się do unikalnego id inputa(#search) i diva(#result) utwórz dla nich klasy

  1. <input type="text" name="aaa" class="inp_1">
  2. <div class="div_1"></div>
  3.  
  4. <input type="text" name="bbbb" class="inp_2">
  5. <div class="div_2"></div>


[JAVASCRIPT] pobierz, plaintext
  1. $(".inp_1").live('keyup', function(){
  2. var search = $(this).val();
  3. var myClass = $(this).attr('class').split('_');
  4. var result = $('.div_'+myClass[1]);
  5. ...
[JAVASCRIPT] pobierz, plaintext
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.