Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: kilka spraw zwiazanych z js
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
jjkk
Otoz zaczynam przygode z js i napotkalem kilka problemow:) Od razuproszeosoby odsylajace do manuala o nie zabieranie glosu, bo zawsze patrze tam zanim zadam pytanie
Otoz:
1) Czemu pod IE nie dziala jak trzeba...przeciez nie ma w tym niczego skomplikowanego:)

  1. <?php
  2. <script type="text/javascript">
  3.  
  4. window.onload = function() {
  5.  
  6. document.forms['formularz'].onkeyup = sprawdz;
  7.  
  8. }
  9.  
  10. function sprawdz() {
  11.  
  12. var elements = document.forms['formularz'].elements;
  13. for(var i=0;i<elements.length;i++) {
  14. if(elements[i].value.length == elements[i].getAttribute('maxlength'))
  15. elements[i+1].focus();
  16. }
  17.  
  18.  
  19. }
  20.  
  21. </script>
  22. ?>


2) Czemu zwraca "undefined"?

  1. <?php
  2. <script type="text/javascript">
  3.  
  4. var i = 5;
  5.  
  6. window.onload = function() {
  7.  
  8.  
  9. var j;
  10.  
  11. if(j) {
  12. var i = 1;
  13. }
  14.  
  15. alert(i);
  16.  
  17. }
  18. </script>
  19. ?>


3) Czemu nie mozna tak:)

  1. <?php
  2. <script type="text/javascript">
  3.  
  4. var i = document.getElementById('cos');
  5.  
  6. alert(i);
  7.  
  8. </script>
  9. ?>


tylko trzeba tak:

  1. <?php
  2. <script type="text/javascript">
  3.  
  4. var i = document.getElementById('cos');
  5.  
  6. alert(i);
  7.  
  8. window.onload = function() {
  9.  
  10. var i = document.getElementById('cos');
  11.  
  12. alert(i);
  13.  
  14. }
  15.  
  16. </script>
  17. ?>


dzieki za odpowiedzi!
abc667
ad1.
bo to ie.
nie działa jak powinno tzn. co?

ad2.
wychodzi na to że js przesłania zmienną 'i' jej lokalnym odpowiednikiem już przy wejściu do funkcji jednak przez ifa zmienna nie zostaje zadeklarowana i dlatego undefined, usuń się var i będzie działać

ad3.
trzeba po onload bo jak weźmiesz od razu to dom może jeszcze nie być gotowy i element cos nie zostanie znaleziony
jjkk
Cytat(abc667 @ 18.08.2007, 17:19:42 ) *
ad1.
bo to ie.
nie działa jak powinno tzn. co?


przy 3 i 4 inpucie zaczyna pisac do tylu:) (ie 5.5)

caly kod:
  1. <?php
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" lang="pl-PL">
  4. <head>
  5. <title></title>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  7.  
  8.  
  9. <script type="text/javascript">
  10.  
  11. window.onload = function() {
  12.  
  13. document.forms['formularz'].onkeyup = sprawdz;
  14.  
  15. }
  16.  
  17. function sprawdz() {
  18.  
  19. var elements = document.forms['formularz'].elements;
  20. for(var i=0;i<elements.length;i++) {
  21. if(elements[i].value.length == elements[i].getAttribute('maxlength') && elements[i+1])
  22. elements[i+1].focus();
  23. }
  24.  
  25.  
  26. }
  27.  
  28.  
  29. </script>
  30.  
  31. </head>
  32. <body>
  33. <div>
  34. <form name="formularz">
  35. <input type="text" name="jeden" maxlength="5" />
  36. <input type="text" name="dwa" maxlength="5" />
  37. <input type="text" name="t" maxlength="5" />
  38. <input type="text" name="c" maxlength="5" />
  39. </form>
  40. </div>
  41. </body>
  42. </html>
  43. ?>
jarrod
Trochę nie tak zabrałeś się to tego zagadanienia.
Rozbudowałem trochę kod ale działa tak jak chcesz (tak myślę przynajmniej winksmiley.jpg

Sprawdzone pod IE 7.0.6, FF 2.0.6, Safari 3.0.3
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="pl-PL">
  2. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  3. <script type="text/javascript">
  4. window.onload = init;
  5. function init()
  6. {
  7. // do każdego elementu formularza dodajemy akcję onkeyup
  8. var elements = document.getElementById('formularz').elements;
  9. for( var i=0; i < elements.length; i++ )
  10. {
  11. elements[i].onkeyup = sprawdz;
  12. }
  13. }
  14. function sprawdz(e)
  15. {
  16. // nie wiadomo z którego pola wywołane jest zdarzenie więc należy się tego dowiedzieć
  17. var e = e || window.event;
  18. if (e.target) targ = e.target;
  19. else if (e.srcElement) targ = e.srcElement;
  20. if (targ.nodeType == 3) // defeat Safari bug
  21. targ = targ.parentNode;
  22.  
  23. if(targ.value.length == targ.getAttribute('maxlength') )
  24. {
  25. // zbieramy kolecję pól typu input w formularzu
  26. var pn_elements = targ.parentNode.childNodes;
  27. var elements = new Array();
  28. for( i=0; i<pn_elements.length; i++ )
  29. {
  30. if(pn_elements[i].nodeName == 'INPUT')
  31. {
  32. elements[elements.length] = pn_elements[i];
  33. }
  34. }
  35. // flaga określająca kiedy przechodzimy przez aktualnie edytowane pole podczas iteracji tablicy z inputami
  36. var start = false;
  37. for( i=0; i<elements.length; i++ )
  38. {
  39. if(elements[i].name == targ.name)
  40. start = true; // od tego momentu startujemy
  41. else if ( start ) // można tutaj dodać warunek - && elements[i].value.length==0 - ale bez tego jest lepszy efekt
  42. {
  43. elements[i].focus();
  44. elements[i].select();
  45. break;
  46. }
  47. }
  48. }
  49. }
  50. </script>
  51. </head>
  52. <div>
  53. <form id="formularz">
  54. <input type="text" name="jeden" maxlength="5" /><br/>
  55. <input type="text" name="dwa" maxlength="3" /><br/>
  56. <input type="text" name="t" maxlength="2" /><br/>
  57. <input type="text" name="c" maxlength="5" /><br/>
  58. </form>
  59. </div>
  60. </body>
  61. </html>
jjkk
Dzieki jarrod! Przyznam, ze chcialem osiagnac dany efekt jak najmniejsza iloscia kodu:) napisaem, wlaczylem opere i dziala...wlaczylem ie no i to co napisalem wczesniej sie dzialo:) dzieki roznwiez za komentarze w kodzie, postudiuje moze nacucze sie czegos nowego:p pzdr
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.