Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][HTML][PHP]Div widoczny po naciśnięciu przycisku
Forum PHP.pl > Forum > Przedszkole
cent4
Witam.
Mam przycisk i po jego naciśnięciu wykonuje się pewien javascript (który wywołuje pewne zdarzenia z pliku php)
1. Jak zrobić (co do tego java scriptu dopisać) żeby po naciśnięciu przycisku pojawił się pewien div np. z treścią - "wykonuję skrypt"?
2. A po wykonaniu skryptu - jak zrobić, żeby po wypisaniu pewnych danych z php na jego końcu - ukryć tego div'a z treścią "wykonuję skrypt"?
IceManSpy
Nie wiem jak zrobić to w czystym JS ale w jQuery masz do tego funkcję show: http://api.jquery.com/show/ A co do chowania do hide: http://api.jquery.com/hide/ smile.gif Opcjonalnie może być http://api.jquery.com/toggle/ lub http://api.jquery.com/slideToggle/ .
Skie
Kod
document.getElementById(id_diva).style.display = "block"; // pokazuje div'a
document.getElementById(id_diva).style.display = "none"; // chowa div'a
cent4
jQUERY pięknie działa:

  1. <button>Show it</button>
  2.  
  3. <p style="display: none">Hello 2</p>
  4. $("button").click(function () {
  5. $("p").show("slow");
  6. });
  7. </script


tylko, że ja bym chciał, żeby to działało z przyciskiem z formularza:

  1. <input type="button" name="submit" value="submit" onClick="ajaxget()" />


a nie z przyciskiem: <button>Show it</button>

?

pojawianie się diva już zrobiłem:
  1. <input type="button" name="submit" value="submit" onClick="ajaxget()" id="submit"/>
  2. ....
  3. <p style="display: none"><img src="loading.gif" border="0"></p>
  4. //$("button").click(function () {
  5. $('#submit').click(function(){
  6.  
  7. $("p").show("slow");
  8. });
  9. </script>


a teraz wykonuje się skrypt php i jak na jego końcu po wypisaniu danych ukryć ponownie tego diva?

  1. echo "<script>";
  2. echo " $(\"p\").hide(\"slow\"); ";
  3. echo "</script> ";


powyższy kod nie działa sciana.gif
kamil4u
Możliwości jest kilka:
- DOM nie został załadowany (w jQuery to chyba $(document).ready )
- w ogóle nie wczytałeś pliku jQuery

Spr. co zawiera konsola błędów
cent4
to jest mój cały plik php:
  1. <?
  2. //echo"<script src=\"jquery-latest.min.js\"></script>";
  3. function checkDomain($domain,$server,$findText){
  4. // Open a socket connection to the whois server
  5. $con = fsockopen($server, 43);
  6. if (!$con) return false;
  7.  
  8. // Send the requested doman name
  9. fputs($con, $domain."\r\n");
  10.  
  11. // Read and store the server response
  12. $response = ' :';
  13. while(!feof($con)) {
  14. $response .= fgets($con,128);
  15. }
  16.  
  17. // Close the connection
  18. fclose($con);
  19.  
  20. // Check the response stream whether the domain is available
  21. if (strpos($response, $findText)){
  22. return true;
  23. }
  24. else {
  25. return false;
  26. }
  27. }
  28.  
  29. function showDomainResult($domain,$server,$findText){
  30. if (checkDomain($domain,$server,$findText)){
  31.  
  32. echo "<tr><td>$domain</td> <td>&nbsp;&nbsp;&nbsp;</td> <td><B>DOSTĘPNA</B><br /></td></tr>";
  33. }
  34. else echo "<tr><td>$domain</td> <td>&nbsp;&nbsp;&nbsp;</td> <td>ZAJĘTA<br /></td></tr>";
  35. }
  36.  
  37. $domena = $_GET['txtname'];
  38.  
  39. echo "<TABLE>";
  40. showDomainResult($domena.".eu",'whois.eu','No match for');
  41. showDomainResult($domena.".pl",'whois.dns.pl','No information about');
  42. showDomainResult($domena.".com",'whois.crsnic.net','No match for');
  43. showDomainResult($domena.".net",'whois.crsnic.net','No match for');
  44. showDomainResult($domena.".org",'whois.publicinterestregistry.net','NOT FOUND');
  45. showDomainResult($domena.".info",'whois.afilias.net','NOT FOUND');
  46. echo "</TABLE>";
  47.  
  48.  
  49. echo "<script>";
  50. echo " $(\"p\").hide(\"slow\"); ";
  51. echo "</script> ";
  52.  
  53. ?>


Części javascript nie działają :-( co muszę zmienić?
nospor
przekombinowales.
Skoro skrypt php jest wczytany ajaxem i po jego wczytaniu chcesz ukryc diva to musisz to zrobic w zdarzeniu ajaxa a nie w skrypcie który ajaxem wczytales smile.gif

http://api.jquery.com/jQuery.ajax/
Cytat
success is called if the request succeeds. It is passed the returned data, a string containing the success code, and the XMLHttpRequest object.

Cytat
$.ajax({
url: 'ajax/test.html',
success: function(data) {
$('.result').html(data);
alert('Load was performed.');
}
});

zamiast ALERT masz dac ukrycie diva
cent4
Wstawiłem taki kod na końcu index.html i dalej nie działa:

  1. $.ajax({
  2. url: 'index.html',
  3. success: function(data) {
  4. $('.result').html(data);
  5. $("p").hide("slow");
  6. }
  7. });
  8. </script>
Wicepsik
Bo to jest przykład! sciana.gif Człowieku myśl i czytaj dokumentacje!
cent4
Przestudiowałem dokumentację - stworzyłem skrypt ale coś dalej mi nie działa:

  1. $('#loading').hide();
  2. $('#submit').click(function(){
  3. $.ajax({
  4. url: 'basicform.php',
  5. success: function(data) {
  6. $('.result').html(data);
  7. $('#loading').hide("slow");
  8. },
  9. beforeSend: function(){
  10. $('#loading').show();
  11. };
  12.  
  13. })
  14. };


plik html:

  1. <p id="loading" ><img src="loading-mini.gif" alt="" /> pobieranie...</p>
nospor
Cytat
ale coś dalej mi nie działa:
kurde.... ale jakie "coś" ci nie działa. Nie pokazuje sie? Nie chowa sie? komputer dymi?
cent4
podczas otwierania strony:
<p id="loading" ><img src="loading-mini.gif" alt="" /> pobieranie...</p>
jest widoczny - ładuje się - widać animację pobieranie danych, a ma być nie widoczny - widoczny ma być dopiero po naciśnięciu buttona i ma zniknąć jak ajax pobierze dane z pliku php
nospor
<p id="loading" style="display:none;">....
i juz. No nie robcie wszystkiego na js.
cent4
A toś mnie teraz zaskoczył...

Myślisz, że nie próbowałem z style="display:none;"...

Nie działa - tzn. element jest ukryty podczas startu ale javascript nie komunikuje się poprawnie z tym elementem - tzn. nie pokazuje go po naciśnięciu przycisku i nie ukrywa go po otrzymaniu odpowiedzi od ajaxa...
mortus
A czy ten przycisk ma atrybut id o wartości submit (id="submit"), bo $('#submit').click(...) przechwytuje zdarzenie kliknięcia na czymś, co ma id o wartości submit.
cent4
to jest mój przycisk submit:

<input type="button" name="submit" value="submit" onClick="ajaxget()" id="submit"/>
mortus
Łudząco podobny do tego sprzed kilku postów tyle, że tam nie było id ustawione. Proponuję, abyś pokazał cały kod, bo wydaje mi się, że trochę przedobrzyłeś.
cent4
Oto cały kod;

  1. <head>
  2. <META HTTP-EQUIV="content-type" CONTENT="text/html; CHARSET=iso-8859-2">
  3. <title>PHP using AJAX</title>
  4. <script type="text/javascript" src="google_ga.js"></script>
  5. <script type="text/javascript" src="jquery-1.4.min.js"></script>
  6.  
  7. <script type="text/javascript">
  8. function ajaxRequest(){
  9. var activexmodes=["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
  10. if (window.ActiveXObject){ //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken)
  11. for (var i=0; i<activexmodes.length; i++){
  12. try{
  13. return new ActiveXObject(activexmodes[i])
  14. }
  15. catch(e){
  16. //suppress error
  17. }
  18. }
  19. }
  20. else if (window.XMLHttpRequest) // if Mozilla, Safari etc
  21. return new XMLHttpRequest()
  22. else
  23. return false
  24. }
  25.  
  26. function ajaxget(){
  27. var mygetrequest=new ajaxRequest()
  28. mygetrequest.onreadystatechange=function(){
  29. if (mygetrequest.readyState==4){
  30. if (mygetrequest.status==200 || window.location.href.indexOf("http")==-1){
  31. document.getElementById("result").innerHTML=mygetrequest.responseText
  32. }
  33. else{
  34. alert("An error has occured making the request")
  35. }
  36. }
  37. }
  38. var txtnamevalue=encodeURIComponent(document.getElementById("txtname").value)
  39. mygetrequest.open("GET", "basicform.php?txtname="+txtnamevalue, true)
  40. mygetrequest.send(null)
  41.  
  42. }
  43. </script>
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50. <script type="text/javascript">
  51. $('#loading').hide();
  52. $('#submit').click(function(){
  53. $.ajax({
  54. url: 'basicform.php',
  55. success: function(data) {
  56. $('.result').html(data);
  57. $('#loading').hide("slow");
  58. },
  59. beforeSend: function(){
  60. $('#loading').show();
  61. }
  62.  
  63. })
  64. };
  65. </script>
  66.  
  67. <style type="text/css">
  68. #loading {
  69. position: absolute;
  70. width: 150px;
  71. padding: 5px;
  72. background: white;
  73. border: 1px solid gray;
  74. font-family: Courier New, Verdana;
  75. font-size: 40%;
  76.  
  77. }
  78. #loading img {
  79. vertical-align: middle;
  80. }
  81. </style>
  82.  
  83. </head>
  84.  
  85. <body>
  86. <form action="" method="get" id="target">
  87. <tr>
  88. <td>Sprawdź czy domena jest dostępna</td>
  89. <td>
  90. <input type="text" name="txtname" id="txtname" />
  91. </td>
  92. </tr>
  93.  
  94. <tr>
  95. <td colspan="2">
  96. <input type="button" name="submit" value="submit" onClick="ajaxget()" id="submit"/>
  97. </CENTER>
  98. </td>
  99. </tr>
  100. </table>
  101.  
  102.  
  103. </form>
  104.  
  105. <p id="loading" style="display:none;"><img src="loading-mini.gif" alt="" /> pobieranie...</p>
  106.  
  107. <span id="result"></span>
  108.  
  109. </body>
  110. </html>
mortus
Jeśli plik jquery-1.4.min.js i plik basicform.php znajdują się w tym samym katalogu, co poniższy plik to wszystko powinno działać prawidłowo.
  1. <head>
  2. <META HTTP-EQUIV="content-type" CONTENT="text/html; CHARSET=iso-8859-2">
  3. <title>PHP using AJAX</title>
  4. <script type="text/javascript" src="google_ga.js"></script>
  5. <script type="text/javascript" src="jquery-1.4.min.js"></script>
  6. <script type="text/javascript">
  7. $('#loading').hide();
  8. $('#submit').click(function(){
  9. $.ajax({
  10. url: 'basicform.php',
  11. success: function(data) {
  12. $('#result').html(data);
  13. $('#loading').hide("slow");
  14. },
  15. beforeSend: function(){
  16. $('#loading').show();
  17. }
  18.  
  19. })
  20. };
  21. </script>
  22.  
  23. <style type="text/css">
  24. #loading {
  25. position: absolute;
  26. width: 150px;
  27. padding: 5px;
  28. background: white;
  29. border: 1px solid gray;
  30. font-family: Courier New, Verdana;
  31. font-size: 40%;
  32.  
  33. }
  34. #loading img {
  35. vertical-align: middle;
  36. }
  37. </style>
  38.  
  39. </head>
  40.  
  41. <body>
  42. <form action="" method="get" id="target">
  43. <tr>
  44. <td>Sprawd czy domena jest dostpna</td>
  45. <td>
  46. <input type="text" name="txtname" id="txtname" />
  47. </td>
  48. </tr>
  49.  
  50. <tr>
  51. <td colspan="2">
  52. <input type="button" name="submit" value="submit" id="submit"/>
  53. </CENTER>
  54. </td>
  55. </tr>
  56. </table>
  57.  
  58.  
  59. </form>
  60.  
  61. <p id="loading" style="display:none;"><img src="loading-mini.gif" alt="" /> pobieranie...</p>
  62.  
  63. <span id="result"></span>
  64.  
  65. </body>
  66. </html>

Jeśli nie działa polecam zainstalować Firebug'a dla Firefox'a i sprawdzać żądania w zakładce Sieć.

Prześledź zmiany. Skoro używamy jquery, to Twoje funkcje nie są potrzebne.
cent4
powyższa treść nie działa - sprawdzam wszystko Firebugiem - tak jak zasugerowałeś

jeszcze jedna uwaga - niewiedzieć czemu jak usunę moje funkcje wogóle mi nic nie działa ajax - klikam w button i nic się niedzieje...
mortus
A jquery się w ogóle ładuje?

No oczywiście, że nie działa, bo nie ma prawa działać. Zastąp odpowiedni kod tym:
  1. <script type="text/javascript">
  2. $(document).ready(function() {
  3. $('#loading').hide();
  4. $('#submit').click(function(){
  5. $.ajax({
  6. url: basicform.php,
  7. succes: function(data) {
  8. $('#result').html(data);
  9. $('#loading').hide('slow');
  10. },
  11. beforeSend: function() {
  12. $('#loading').show();
  13. }
  14. });
  15. });
  16. });
Brakowało tego, co w jQuery najistotniejsze, czyli $(document).ready(...);. Poza tym nawiasy były źle pozamykane.
cent4
Firebugiem nie znajduję żadnych błędów.

dalej nic - nie ma okna animacji podczas działania ajax.

Szukam też metody jak sprawdzić na szybko czy jQUERY się załadowało - bo coś mi się wydaje, że nie.

Wywołałem:
  1. <script type="text/javascript">
  2.  
  3. function powitanie()
  4. {
  5. alert('Witaj');
  6. }
  7.  
  8. var obj = jQuery(document);
  9. obj.ready(powitanie);
  10.  
  11. </script>


i mam informację "Witaj" - więc jquery działa...

już jest prawie ok.
Animacja się ładuje - problem był w:
url: basicform.php,
Miało być url: 'basicform.php',

Animacja się teraz ładuje ale się nie chowa jak już się kończy wszystko.
mortus
Bo success pisze się przez dwa s na końcu. Przepraszam za literówkę.
cent4
Niestety nie pomogło :-(.

Jak sprawdzam firebugiem to widzę dziwną rzecz:

skrypt jak gdyby startuje dwa razy:
http://localhost/~domena2222222/basicform.php?txtname=domena
i
http://localhost/~domena2222222/basicform.php

1 się zatrzymuje jak już mam pokaz efektów wyszukiwań, a ten drugi ciągle jest przetwarzany.

Wygląda na to, jakby basicform startował 2 razy - nie wiem gdzie leży problem?

Sprawdzam i szukam.
Problem jest chyba w formularzu:
  1. <form action="" method="get" >
  2. <tr>
  3. <td>Sprawdź czy domena jest dostępna</td>
  4. <td>
  5. <input type="text" name="txtname" id="txtname" />
  6. </td>
  7. </tr>
  8.  
  9. <tr>
  10. <td colspan="2">
  11. <input type="button" value="submit" onClick="ajaxget()" id="submit"/>
  12. </CENTER>
  13. </td>
  14. </tr>
  15. </table>
  16.  
  17.  
  18. </form>


Problem z: onClick="ajaxget()"

ale nie jestem pewien i nie wiem jak to rozwiązać...

Już wiem - problem leży po stronie ajaxu:

url: 'basicform.php',

ale nadal nie wiem jak go usunąć :-(

Ktoś ma jakiś pomysł?

Rozwiązałem to w "dziwny sposób":

zmieniłem poniższy kod i działa ok:

  1. function ajaxget(){
  2. var mygetrequest=new ajaxRequest()
  3. mygetrequest.onreadystatechange=function(){
  4. if (mygetrequest.readyState==4){
  5. if (mygetrequest.status==200 || window.location.href.indexOf("http")==-1){
  6. document.getElementById("result").innerHTML=mygetrequest.responseText ;
  7. $('#loading').hide();
  8. }
  9. else{
  10. alert("An error has occured making the request")
  11. }
  12. }
  13. }
  14. var txtnamevalue=encodeURIComponent(document.getElementById("txtname").value)
  15. mygetrequest.open("GET", "basicform.php?txtname="+txtnamevalue, true)
  16. mygetrequest.send(null)
  17.  
  18. }
  19. </script>
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26. <script type="text/javascript">
  27. $(document).ready(function() {
  28. $('#loading').hide();
  29. $('#submit').click(function(){
  30. $.ajax({
  31. url: 'basicform.php',
  32. //cache: false,
  33. timeout: '500',
  34. success: function(data) {
  35. $('#result').html(data);
  36. $('#loading').hide('slow');
  37. },
  38. beforeSend: function() {
  39. $('#loading').show();
  40. }
  41. });
  42. });
  43. });
  44. </script>
  45.  


W funkcji: function ajaxget() - w drugim ifie dopisałem: $('#loading').hide();

W javascript odpowiedzialne za jquery - dopisałem: timeout: '500',

W Firebug'u dostaję info, że
skrypt startujący dwa razy:
http://localhost/~domena2222222/basicform.php?txtname=domena
i
http://localhost/~domena2222222/basicform.php

ten drugi zwraca błąd po pół sekundzie i się wywala, a jak skończy się pierwsze wywołanie basicform (z parametrem) - animacja znika.

Wszystko działa teraz ok, ale czy takie rozwiązanie, które gdzieś tam ma błąd może być ok?
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.