getElementById, id-uri diferite

Discutii legate de AJAX, jQuery, MooTools, Prototype, Dojo, Yahoo! UI Library,script.aculo.us, ExtJS,AngularJS, Backbone.js, Ember.js, KnockoutJS

Moderator: Moderatori

AgLiAn
PHPRomania Supporter
Mesaje: 16
Membru din: Vin Noi 05, 2004 10:17 pm
Localitate: Iaşi
Contact:

getElementById, id-uri diferite

Mesajde AgLiAn » Mar Noi 13, 2007 10:07 am

Salut. Am o mica problema, am urmatorul cod html:

Cod: Selectaţi tot

<div id="poll" vAlign="top">
  <form method="GET">
 
<table border="0" cellSpacing="3" cellPadding="0">
 
  <tr>
    <td colspan="2"><input type="button" name="vote" value="1" onclick="getVote(this.value)"></td>
  </tr>
 
</table>

  </form>
</div>
Si bucata de JS:

Cod: Selectaţi tot

var xmlHttp

function getVote(int) {
   xmlHttp = GetXmlHttpObject()
   if (xmlHttp == null) {
      alert ("Browser does not support HTTP Request")
      return
   }
   
   var url = "x.php"
      url = url+"?vote="+int
      url = url+"&sid="+showCookie() //Math.random()
   xmlHttp.onreadystatechange = stateChanged
   xmlHttp.open("GET", url, true)
   xmlHttp.send(null)
}

function stateChanged() {
   if(xmlHttp.readyState == 1) {
      document.getElementById("poll").innerHTML = "<img src=\"indicator_kit.gif\">";
   }
   
   if (xmlHttp.readyState==4 || xmlHttp.readyState == "complete") {
   document.getElementById("poll").
   innerHTML = xmlHttp.responseText;
   }
}

function GetXmlHttpObject() {
   var objXMLHttp = null
   
   if (window.XMLHttpRequest) {      // if Mozilla, Safari etc
      objXMLHttp = new XMLHttpRequest()
      
   } else if (window.ActiveXObject) {   // if IE
      objXMLHttp = new ActiveXObject("Microsoft.XMLHTTP")
   }
   
   return objXMLHttp
}


Intrebarea e, ce trebuie sa modific, cum si unde pentru a putea avea in pagina 2 form-uri diferite, ce sa apeleze aceeasi functie AJAX, insa trimitand parametri diferiti. Stiu ca e vorba de acel id si getElementById, insa nu am reusit sa fac ce voiam.

Dati-mi niste referinte daca aveti, sa citesc, sau explicati-mi voi va rog.
Multumesc.



redcom
Average Member
Mesaje: 120
Membru din: Joi Mai 27, 2004 9:23 am
Localitate: iasi
Contact:

Mesajde redcom » Mar Noi 13, 2007 10:22 am

pai sincer nu ai nevoie de getElementById
Sa presupunem ca ai doua formulare:

Cod: Selectaţi tot

<form name='' id='' method='' action='' return onsubmit='validateThisForm_1()'>

<input type='text' name='d' id='d' value=''>
</form>


<form name='' id='' method='' action='' return onsubmit='validateThisForm_2()'>

</form>



cele doua functii validateThisForm_1 si respeciv doi vor vace validarile de rigoare si fiecare in parte for instantia un obiect ajax cum doresti si iti faci treaba.


Poti accesa elementele fiecarui formular fie clasic (html) fie prin DOM eg:

var d = document.getElementById('d');

alert(d.value);


O sugestie daca imi permiti: foloseste intodeauna buttonul de submit daca vrei sa trimiti un formular. Acesta fie este trimis folosind ajax dupa cum si doresti dar daca nu ai support pentru obiectul respectiv atunci se va trimite clasic deci ai siguranta ca va fi trimis indiferent de mediu.

AgLiAn
PHPRomania Supporter
Mesaje: 16
Membru din: Vin Noi 05, 2004 10:17 pm
Localitate: Iaşi
Contact:

Mesajde AgLiAn » Mar Noi 13, 2007 1:49 pm

Pai si daca am id-uri generate automat, scuipate dintr-o baza de date? Ce mi-ai dat tu acolo e in cazul in care am 2 form-uri, insa daca am 10? Fac 10 functii JS? Vreau sa fie ceva general, sa poate culege orice id de la 0 la pow(99999,99999).


O sugestie daca imi permiti: foloseste intodeauna buttonul de submit daca vrei sa trimiti un formular. Acesta fie este trimis folosind ajax dupa cum si doresti dar daca nu ai support pentru obiectul respectiv atunci se va trimite clasic deci ai siguranta ca va fi trimis indiferent de mediu.
Mersi de sugestie. Voi modifica.

dechim
Senior Member
Mesaje: 1486
Membru din: Mar Mai 10, 2005 11:53 pm
Localitate: Drobeta Turnu Severin

Mesajde dechim » Mar Noi 13, 2007 7:19 pm

Prin

" document.getElementById("poll").innerHTML = xmlHttp.responseText; "

primesti a doua forma de la server dupa vot. Pentru ca si aceasta sa functioneze folosind aceeasi functie Ajax trebuie sa modifici functia.
Id-ul "poll" poate sa ramana :

Cod: Selectaţi tot

function getVote(url) {
   xmlHttp = GetXmlHttpObject()
   if (xmlHttp == null) {
      alert ("Browser does not support HTTP Request")
      return
   }
   xmlHttp.onreadystatechange = stateChanged
   xmlHttp.open("GET", url, true)
   xmlHttp.send(null)
}

Parametrul url transmis functiei trebuie sa fie de forma "fisier.php?var1=val1
&var2=val2&... inclusiv "&sid="+showCookie()
OnClick-ul butonului pentru prima forma va fi :
onclick = "var url='fisier.php?vote='.this.value.'&sid='.showCookie(); getVote(url);"
Forma care o va inlocui dupa actiunea butonului va contine un nou buton cu onclick de aceeasi forma.
@AgLiAn ti-a zis bine da' nu-i ajax si face submit la toata pagina.
Daca vrei sa validezi forma inainte de trimitere (desi poti sa o faci cu scriptul fisier.php), codul onclik va fi:
onclick = "var url='fisier.php?vote='.this.value.'&sid='.showCookie(); return (validate_1() && getVote(url));"
Eu zic ca nu trebuie sa te complici, prin AJAX poti conversa rapid cu serverul. Daca-i eroare trimiti aceeasi forma inapoi cu ceva explicatii despre eroare.
Succes!

Daca ai mai multe forme pe pagina cauta pe forum, am postat eu o functie care le include pe cele 3 dar e POST.
Ultima oară modificat Mar Noi 13, 2007 7:36 pm de către dechim, modificat 1 dată în total.


Înapoi la “Librarii Javascript”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 38 vizitatori