Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wywoływanie skryptu po załadowaniu pliku do diva
Forum PHP.pl > Forum > XML, AJAX > AJAX
dlugi_as
Mam problem, otóż chcę uruchomić skrypt autocomplete w moim projekcie, mianowicie mam stronę pod adresem:

http://womag.nazwa.pl/problem/

kiedy wchodzę do Zgłoszenia->dodaj

ładuję plik http://womag.nazwa.pl/problem/strona.php?act=dodajnowe

nie działa, słyszałem o funkcji live() lecz nie umiem jej użyć bądź nie działa w moim przypadku.

Gdy wpisze go w przeglądarce, to po wpisaniu literki: p w pierwszym inpucie skrypt podpowiada uzupelenienie pola

plik index.php
  1. <?php
  2. session_start();
  3. include('header.php');
  4. ?>
  5. <div id="kontener">
  6. <div class="logotabela">
  7. <div id="menu_kontener_glowne">
  8.  
  9. <ul id="menu_glowne">
  10. <li><a href="java script:void(0);" class="klienci">Klienci</a></li>
  11. <li><a href="java script:void(0);" class="zgloszenia">Zgłoszenia</a></li>
  12. <li><a href="java script:void(0);" class="zadania">Zadania</a></li>
  13. <li><a href="java script:void(0);" class="admin">Admin</a></li>
  14. </ul>
  15.  
  16. <div id="menu_podrz">
  17. <div id="klienci">
  18. <ul id="menu_podrzedne">
  19. <li><a href="">Wyszukaj</a></li>
  20. <li><a href="">Dodaj</a></li>
  21. </ul>
  22.  
  23. </div>
  24. <div id="zgloszenia">
  25. <ul id="menu_podrzedne">
  26. <li><a href="">Przeglądaj</a></li>
  27. <li><a href="">Szukaj</a></li>
  28. <li><a href="java script:ajaxget( 'strona.php?act=dodajnowe' )">Dodaj</a></li>
  29. </ul>
  30. </div>
  31. <div id="zadania">
  32. <ul id="menu_podrzedne">
  33. <li><a href="">Moje zadania</a></li>
  34. <li><a href="">Dodaj zadanie</a></li>
  35. </ul>
  36. </div>
  37. <div id="admin">
  38. <ul id="menu_podrzedne">
  39. <li><a href="">Operatorzy</a></li>
  40. <li><a href="">Dostosuj</a></li>
  41. </ul>
  42. </div>
  43. </div>
  44. </div>
  45.  
  46.  
  47.  
  48. </div>
  49.  
  50.  
  51.  
  52. <div id="srodek">
  53. <div id="strona">
  54. </div>
  55. </div></div>


plik header.php
  1. <?php
  2. require_once('auth.inc.php');
  3. require_once('config.php');
  4. require_once('func.php');
  5. ?>
  6. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  7. <head>
  8. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  9. <link rel="shortcut icon" href="/favicon_aa.ico" type="image/x-icon" />
  10. <link rel="icon" href="/favicon_aa.ico" type="image/x-icon" />
  11. <link rel="stylesheet" href="style.css" type="text/css" />
  12. <title>j4r4net - System zgłoszeń</title>
  13. <script type="text/javascript" src="jquery.js"></script>
  14. <style type="text/css">
  15. <!--
  16. body {
  17. background-color: #D8E3F5;
  18. }
  19. -->
  20. </style>
  21. <style type="text/css">
  22.  
  23. </style>
  24.  
  25. <script type="text/javascript">
  26.  
  27. </script>
  28.  
  29. <link type="text/css" href="themes/base/jquery.ui.all.css" rel="stylesheet" />
  30. <script type="text/javascript" src="jquery.js"></script>
  31. <script type="text/javascript" src="js/jquery.ui.core.js"></script>
  32. <script type="text/javascript" src="js/jquery.ui.widget.js"></script>
  33. <script type="text/javascript" src="js/jquery.ui.datepicker.js"></script>
  34.  
  35. <script type="text/javascript">
  36. $(function() {
  37. var dates = $('#from, #to').datepicker({
  38. defaultDate: "+1w",
  39. changeMonth: true,
  40. numberOfMonths: 3,
  41. onSelect: function(selectedDate) {
  42. var option = this.id == "from" ? "minDate" : "maxDate";
  43. var instance = $(this).data("datepicker");
  44. var date = $.datepicker.parseDate(instance.settings.dateFormat || $.datepicker._defaults.dateFormat, selectedDate, instance.settings);
  45. dates.not(this).datepicker("option", option, date);
  46. }
  47. });
  48. });
  49. </script>
  50. <script type="text/javascript" src="js/tabki.js"></script>
  51. <script language="JavaScript" type="text/javascript" src="ajax/advAJAX/advajax.js"></script>
  52. <script language="JavaScript" type="text/javascript" src="ajax/js/ajax.js"></script>
  53. <script type="text/javascript" src="js/jquery.autocomplete.min.js"></script>

plik tabki.js
  1.  
  2. $().ready(function()
  3. {
  4. $("ul#menu_glowne a").live('click',function()
  5. {
  6. $("ul#menu_glowne .active").removeClass("active");
  7. $(this).parent().addClass("active");
  8.  
  9. var element_index = $("#menu_glowne a").index(this);
  10.  
  11. $("#menu_podrz div:visible").hide();
  12. $("#menu_podrz div").eq(element_index).show();
  13.  
  14. return false;
  15. });
  16. });


plik strona.php?act=dodajnowe
  1. <!DOCTYPE html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  4. <title>jQuery Autocomplete</title>
  5. <script type="text/javascript" src="jquery.js"></script>
  6. <script type="text/javascript" src="js/jquery.autocomplete.min.js"></script>
  7.  
  8.  
  9.  
  10. <script type="text/javascript">
  11. $(function(){
  12.  
  13. $("input[name='miasto1']").autocomplete('autoKlienci.php',{
  14. width:300,
  15. formatItem: function(row, i, max) {
  16. return "(<b>ID: " + row[0] + "</b>)" + row[1] + " " + row[2] + " (nip: " + row[3] + " ";
  17. },
  18. formatMatch: function(row, i, max) {
  19. return row[1];
  20. },
  21. formatResult: function(row) {
  22. return row[0];
  23. }
  24.  
  25.  
  26.  
  27. });
  28.  
  29. $("input[name='miasto2']").autocomplete('autoKlienci.php',{
  30. width:300,
  31. formatItem: function(row, i, max) {
  32. return row[1] + " (<i>" + row[2] + "</i>)";
  33. },
  34. formatMatch: function(row, i, max) {
  35. return row[1];
  36. },
  37. formatResult: function(row) {
  38. return row[2];
  39. }
  40.  
  41. });
  42. });
  43. </script>
  44. <style type="text/css">
  45. /*demo page css*/
  46. body { font: 62.5% "Tahoma", sans-serif; margin: 10px 0px; color:#111111; }
  47. h1,h2,h3,h4,h5 { color: #555555; }
  48. h1 { font-size: 17px; font-weight: bold; }
  49. h2 { font-size: 13px; font-weight: bold; }
  50. h3 { font-size: 11px; font-weight: bold; }
  51. img { vertical-align: middle; }
  52. pre { font-size: 11px; margin: 10px 0px; }
  53. div.c { margin: 10px 0px; font-size: 11px; }
  54.  
  55. .ac_results {
  56. padding: 0px;
  57. border: 1px solid black;
  58. background-color: white;
  59. overflow: hidden;
  60. z-index: 99999;
  61. }
  62.  
  63. .ac_results ul {
  64. width: 100%;
  65. list-style-position: outside;
  66. list-style: none;
  67. padding: 0;
  68. margin: 0;
  69. }
  70.  
  71. .ac_results li {
  72. margin: 0px;
  73. padding: 2px 5px;
  74. cursor: default;
  75. display: block;
  76. /*
  77. if width will be 100% horizontal scrollbar will apear
  78. when scroll mode will be used
  79. */
  80. /*width: 100%;*/
  81. font: menu;
  82. font-size: 12px;
  83. /*
  84. it is very important, if line-height not setted or setted
  85. in relative units scroll will be broken in firefox
  86. */
  87. line-height: 16px;
  88. overflow: hidden;
  89. }
  90.  
  91. .ac_loading {
  92. background: white url('indicator.gif') right center no-repeat;
  93. }
  94.  
  95. .ac_odd {
  96. background-color: #eee;
  97. }
  98.  
  99. .ac_over {
  100. background-color: #0A246A;
  101. color: white;
  102. }
  103. </style>
  104. </head>
  105. <body>
  106. <h2>Przykład 4. Użycie opcji <i>formatItem, formatMatch, formatResult</i>.</h2>
  107.  
  108. <h3>4.1 formatujemy sposób prezentacji listy, do naszego inputa przesyłamy nazwę miasta</h3>
  109.  
  110. <div class="c">
  111. Miejscowość: <input type="text" name="miasto1" /> ( Naciśnij "p", aby wywołać podpowiedzi. )
  112. </div>
  113.  
  114. <legend>HTML</legend>
  115.  
  116. <pre><code class="html">&lt;input type=&quot;text&quot; name=&quot;miasto&quot; /&gt;</code></pre>
  117.  
  118. <div class="c"></div>
  119.  
  120.  
  121. <legend>JavaScript</legend>
  122. <pre><code class="js">
  123. $("input[name='miasto']").autocomplete('miasta.php',{
  124. width:300,
  125. formatItem: function(row, i, max) {
  126. return row[1] + " (&lt;b&gt;ID: " + row[0] + "&lt;/b&gt;)";
  127. },
  128. formatMatch: function(row, i, max) {
  129. return row[1];
  130. },
  131. formatResult: function(row) {
  132. return row[1];
  133. }
  134. });
  135. </code></pre>
  136.  
  137. <h3>4.2 zmieniamy sposób formatowania listy, do naszego inputa przesyłamy tym razem nazwę województa</h3>
  138.  
  139. <div class="c">
  140. Miejscowość: <input type="text" name="miasto2" /> ( Naciśnij "W", aby wywołać podpowiedzi. )
  141. </div>
  142.  
  143. <legend>HTML</legend>
  144. <pre><code class="html">&lt;input type=&quot;text&quot; name=&quot;miasto&quot; /&gt;</code></pre>
  145.  
  146.  
  147. <div class="c"></div>
  148.  
  149. <legend>JavaScript</legend>
  150. <pre><code class="js">
  151. $("input[name='miasto']").autocomplete('miasta.php',{
  152. width:300,
  153. formatItem: function(row, i, max) {
  154. return row[1] + " (&lt;i&gt;" + row[2] + "&lt;/i&gt;)";
  155. },
  156. formatMatch: function(row, i, max) {
  157. return row[1];
  158. },
  159. formatResult: function(row) {
  160. return row[2];
  161. }
  162. });
  163.  
  164. </code></pre>
  165.  
  166. </body>
  167. </html>




ładowanie pliku odbywa sie za pomoca funkcji w pliku ajax.js
  1. function ajaxget( link, ResponseId )
  2. {
  3. if( ResponseId == undefined )
  4. {
  5. ResponseId = 'strona';
  6. }
  7.  
  8. link = ""+link;
  9. advAJAX.get({
  10. url: link,
  11. onLoading : function() {
  12. contentHTML = document.getElementById( ResponseId ).innerHTML;
  13. document.getElementById( ResponseId ).innerHTML = document.getElementById( 'loadtemplate2' ).innerHTML;
  14. },
  15. onSuccess : function(obj) {
  16. document.getElementById( ResponseId ).innerHTML = obj.responseText;
  17. ajaxDebug( obj.responseText );
  18. },
  19. onError : function(obj) {
  20. document.getElementById( ResponseId ).innerHTML = contentHTML;
  21. window.alert('Wystąpił nieoczekiwany błąd. Powtórz operację.');
  22. }
  23. });
  24. }


Proszę o wyczerpujące odpowiedzi, ponieważ dopiero zaczynam przygode z ajaxem. Przesiedziałem 3 dni nad tym, aby dojść do tego dlaczego to nie chce działać i zamiast naprawić to psułem jeszcze bardziej moją pracę.
Wave
No ale zastanów się co Ty robisz? Tak wygląda ta strona po pobraniu pliku ajaxem:
  1. <div id="strona">
  2.  
  3.  
  4.  
  5.  
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>jQuery Autocomplete</title>
  8. <script type="text/javascript" src="jquery.js"></script>
  9. <script type="text/javascript" src="js/jquery.autocomplete.min.js"></script>
  10.  
  11.  
  12.  
  13. <script type="text/javascript">
  14.  
  15. $(function(){
  16.  
  17. $("input[name='miasto1']").autocomplete('autoKlienci.php',{
  18. width:300,
  19. formatItem: function(row, i, max) {
  20. return "(<b>ID: " + row[0] + "</b>)" + row[1] + " " + row[2] + " (nip: " + row[3] + " ";
  21. },
  22. formatMatch: function(row, i, max) {
  23. return row[1];
  24. },
  25. formatResult: function(row) {
  26. return row[0];
  27. }
  28.  
  29.  
  30.  
  31. });
  32.  
  33. $("input[name='miasto2']").autocomplete('autoKlienci.php',{
  34. width:300,
  35. formatItem: function(row, i, max) {
  36. return row[1] + " (<i>" + row[2] + "</i>)";
  37. },
  38. formatMatch: function(row, i, max) {
  39. return row[1];
  40. },
  41. formatResult: function(row) {
  42. return row[2];
  43. }
  44.  
  45. });
  46. });
  47. </script>
  48.  
  49. <style type="text/css">
  50. /*demo page css*/
  51. body { font: 62.5% "Tahoma", sans-serif; margin: 10px 0px; color:#111111; }
  52. h1,h2,h3,h4,h5 { color: #555555; }
  53. h1 { font-size: 17px; font-weight: bold; }
  54. h2 { font-size: 13px; font-weight: bold; }
  55. h3 { font-size: 11px; font-weight: bold; }
  56. img { vertical-align: middle; }
  57. pre { font-size: 11px; margin: 10px 0px; }
  58. div.c { margin: 10px 0px; font-size: 11px; }
  59.  
  60. .ac_results {
  61. padding: 0px;
  62. border: 1px solid black;
  63. background-color: white;
  64. overflow: hidden;
  65. z-index: 99999;
  66. }
  67.  
  68. .ac_results ul {
  69. width: 100%;
  70. list-style-position: outside;
  71. list-style: none;
  72. padding: 0;
  73. margin: 0;
  74. }
  75.  
  76. .ac_results li {
  77. margin: 0px;
  78. padding: 2px 5px;
  79. cursor: default;
  80. display: block;
  81. /*
  82. if width will be 100% horizontal scrollbar will apear
  83. when scroll mode will be used
  84. */
  85. /*width: 100%;*/
  86. font: menu;
  87. font-size: 12px;
  88. /*
  89. it is very important, if line-height not setted or setted
  90. in relative units scroll will be broken in firefox
  91. */
  92. line-height: 16px;
  93. overflow: hidden;
  94. }
  95.  
  96. .ac_loading {
  97. background: white url('indicator.gif') right center no-repeat;
  98. }
  99.  
  100. .ac_odd {
  101. background-color: #eee;
  102. }
  103.  
  104. .ac_over {
  105. background-color: #0A246A;
  106. color: white;
  107. }
  108. </style>
  109.  
  110. <h2></h2>
  111.  
  112. <h3>do inputa przesyłamy id kleinta</h3>
  113.  
  114. <div class="c">
  115. klient: <input name="miasto1" type="text"> ( Naciśnij "p", aby wywołać podpowiedzi. )
  116. </div>
  117.  
  118.  
  119. </div>
dlugi_as
no dobra, wyeksportowalem te dane do plikow i nie zadeklarowalem ich w nim, tylko pozostawilem czysty text i input. questionmark.gif dobrze questionmark.gif
Wave
no jak działa to chyba dobrze?
dlugi_as
Teraz działa, wykorzystałem inny skrypt:

strona.php?act=dodajnowe
  1. <form>
  2. <div>
  3. Type your county:
  4. <br />
  5. <input type="text" size="30" value="" id="inputString" onkeyup="lookup(this.value);" onblur="fill();" autocomplete="off"/>
  6. </div>
  7.  
  8. <div class="suggestionsBox" id="suggestions" style="display: none;">
  9. <img src="autoComplete/upArrow.png" style="position: relative; top: -12px; left: 30px;" alt="upArrow" />
  10. <div class="suggestionList" id="autoSuggestionsList">
  11. &nbsp;
  12. </div>
  13. </div>
  14. </form>


skrypt.js
  1. function lookup(inputString) {
  2. if(inputString.length == 0) {
  3. // Hide the suggestion box.
  4. $('#suggestions').hide();
  5. } else {
  6. $.post("autoKlienci.php", {queryString: ""+inputString+""}, function(data){
  7. if(data.length >0) {
  8. $('#suggestions').show();
  9. $('#autoSuggestionsList').html(data);
  10. }
  11. });
  12. }
  13. } // lookup
  14.  
  15. function fill(thisValue) {
  16. $('#inputString').val(thisValue);
  17. setTimeout("$('#suggestions').hide();", 200);
  18. }


W tym skrypcie cały kod jest w metodach function fill i lookup, w wczesniejszych wersjach tak nie bylo.
W wcześniejszej wersji odbywało się to inaczej, bez onclick i onblur, czy to możliwe, że skrypty ładowane prez ajaxa, nie beda dzialac dopoki nie bedzie odwolan do metody za pomoca np. onclick ?

Dobrze myślę questionmark.gif
Wave
Nie do końca. Teraz nie ładujesz dynamicznie skryptu js, jedynie sam kod html z triggerem. Sytuacja się komplikuje przy dynamicznym ładowaniu kodu, wtedy trzeba korzystać z eval() lub operować metodami DOM (appendChild).
dlugi_as
a mógłbyś zaproponować użycie tego eval() bądź appendChild, bo szczerze mówiąc próbowałem użyć tych metod, ale niestety nie działały
Wave
Kod
var nowySkrypt = document.createElement("script");
    nowySkrypt.setAttribute("type", "text/javascript");
    nowySkrypt.setAttribute("src", "plik.js");

    document.getElementsByTagName("head")[0].appendChild(nowySkrypt);

eval masz np tu opisane http://www.webreference.com/programming/javascript/mk/

ale ogólnie to polecam google http://www.google.com/search?q=dynamiczne+...anie+skrypt%F3w
dlugi_as
Dzięki wielkie, pomogłeś mi, szukałem tego a znaleźć nie mogłem
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.