Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Active Validate JS+AJAX
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Beynar
Potrzebuje zrobic na stronie tzw. Active validate. Wiec jak mam formularz lub\i formularze to za pomoca JS zbieram liste wszystkich pol. Chcialbym aby wartosci pol wraz z ich ID gdy urzytkownik wprowadzi dane zostaly poddane wlidacji poprzez AJAX wyslane do serwera, ktory sprawdzi ktore pole jest walidowane oraz sprawdzi jego wartosc po czym odpowie zwracajac 1 gdy wartosc pola jest nieprawidlowa(np. za malo jest znakow).

Wszystko jest dobrze tylko ja nie-chce dopisywac do kazdego pola wartosci onchange="blabla" tyko aby skryt sam mi zliczyl pola i oczekiwal na zdazenia z danego pola. Probowalem zapisac taki oto kod

Nasz formularz:
Kod

  <form id="rejestracja" method="post" action="index.html">
      <input type="text" id="FIRST_NAME" name="FIRST_NAME"/>
       <input type="text" id="LAST_NAME" name="LAST_NAME" />
       <input type="text" id="EMAIL" name="EMAIL" />
       <input type="submit" id="SUBMIT" value="rejestruj" />
  </form>


Skrypt zwracajacy tablice ID wszystkich pol, z wszystkich formow w dokumencie:
Kod
     <script>
       var formsNo=document.forms.length;
       var tab=new Array();
  
       for(var i=0; i < formsNo; i++){
           inputsNo=document.forms[i].elements.length;
           for(c=0; c<inputsNo; c++ ){
               element=document.forms[i].elements[c];
               tab.push(element.id);
           }
       </script>



Wiec jak mam formulaz to skrypt powyzej zlicza pola i ID tych pol zapisuje do tablicy "tab". Jak teraz zrobic aby przy zdarzeniu onchange zostal wykonany jakis skrypt, probowalem zapisac do tej tablicy:
Kod
"document.forms[i].elements[c].onchange=function(){alert(document[forms[i].elements[c].id);}"
...aby przy zdarzeniu onchange wykonala sie funkcja i wyswietli mi okienko z ID pola formularza, taki zapis mi niedziala bo do tablicy zapisuje mi stringi gdy wyswietlilem sobie zawartosc jednego pole w tej tablicy to mialem forms[i].elements[c] niepodstawialo mi wartosci "i" i "c".

Zatem jak napisac ta funkce aby oczekiwala na zdarzenie pochodzace z pola formularza?? Oraz aby ta funkcja niebyla z dokumencie ale w sekcji head
piechnat
A nie możesz po prostu zrobić tak:

Kod
  onload = function() {
    for(var i = 0; i < document.forms.length; i++) {
      var frm = document.forms[i];
      for(var j = 0; j < frm.elements.length; j++) {
        frm.elements[j].onchange = onchangeCallback;
      }
    }
  }
  function onchangeCallback() {
    alert(this.form.id + ': ' + this.id);
  }
Beynar
dobrze wszystko ok ale czy moge jakos tak zrobic zeby ten skrypt byl w head albo w pliku skrypt.js??
bo chodzi oto ze ja przy kazdym zaladowaniu formulaza bede musial dopisywac ten skrypt na koncu.
formularze dopisuje za pomoca AJAX'a wiec chcialbym poprostu nawet juz tylko na koncu formularzy wywolac funkcje ktora bylaby zaladowana w head
piechnat
Cytat(Beynar @ 26.12.2007, 12:29:48 ) *
dobrze wszystko ok ale czy moge jakos tak zrobic zeby ten skrypt byl w head albo w pliku skrypt.js??

Oczywiście, możesz to wstawić w head (czyli też w zewnętrznym pliku) albo funkcję przypisaną do zdarzenia onload dać w head a funkcję onchangeCallback zdefiniować w dowolnym miejscu dokumentu (bo to co jest w onload i tak wykona się dopiero po załadowaniu strony więc onchangeCallback będzie już zdefiniowane).
Beynar
nom ok.smile.gif
ale mam jeszcze jeden problem
a co jesli niebedechcial wykonywac na inpucie activ validate
np mam 2 inputy i ten skrypt dziala na oba ale ja chcialbym aby na ten grugi niereagowal
jak mogbym to rozwiazac
piechnat
Może jakaś walidacja po ID (albo className)?
Kod
  function onchangeCallback() {
    var ids = ['FIRST_NAME', 'LAST_NAME'];
    for (var i = 0; true; i++) {
      if (i == ids.length) return;
      if (ids[i] == this.id) break;
    }
    // obsluga elementow o id FIRST_NAME i LAST_NAME
  }
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.