[ Ivan Golubović @ 06.01.2012. 02:51 ] @
AJAX i JS su novi za mene, tako da se unapred izvinjavam ako postavljam banalno pitanje, ali stvarno nisam uspeo da pronađem rešenje...

Imam generisanu HTML tabelu sa formularima:
Code:
<td><form name="korpa_form" id="korpa_form">
                 <input name="trazeno" type="text" id="trazeno" value="1" size="2" maxlength="3" />
                 <input type="button" value="&gt;" id="dodaj_u_korpu" onclick="updKorpa();" />
                 <input name="did" type="hidden" id="did" value="<? echo $r["did"]; ?>" />              
</form></td>

I JS koji radi super kada imam samo jedno polje...
Code:
function updKorpa (){
    var did = $('#did').val();
    var trazeno = $('#trazeno').val();
    $.post('fnc_korpa.php', 
            { did: did, trazeno: trazeno }, function(blabla){
        $('#korpa').html(blabla);
    });
};


E sada problem mi je što ja mogu da imam i po 20 formulara na istoj strani i kada kliknem na neki od njih on mi doda did i trazeno od prvog formulara na stranici. Kako da rešim ovo (a da ne pišem 20 istih funkcija)?
[ plague @ 06.01.2012. 03:34 ] @
Moraces da osmislis jedinstveni nacin dodeljivanja ID-a ili nekog drugog atributa tim elementima kako bi mogao da im se jedinstveno obratis.
Mislim da ti ne valja sto si mesao JS i jQuery na ovakav nacin, ako vec koristis jQuery mogao bi do kraja sa njim da ides. Form tag ti je bespotreban jer AJAX prosledjuje podatke php strani, bitno je da ona zna kako da ih obradi. Mozes cak i koristiti neke druge elemente prilikom pozivanja AJAX-a kao sto su anchor ili img.

Uglavnom, ovde je vise problem logicke prirode nego relalizacione. Kada hoces da dodas neki prozivod u korpu, ti moras nekako doci do njegovog ID-a (ako se oni nalaze u bazi). Taj ID mozes cuvati u hidden polju, u <div> tagu koji obuhvata proizvod, nebitno je. Ono sto je bitno je da kada neki element pozove funkciju ti moras nekako uz pomoc njega iscupati taj podatak.
Sada, zamislimo da si napravio <input type="button" id="3434"> gde je id atribut ID tvog proizvoda. Mozes mu staviti dogadjaj onClick="f(this);" sto znaci da ce pozvati funkciju f() i da ce kao argument proslediti sam element. Dalje u funkciji ti mozes pristupiti tom elementu i pokupiti koji god podatak da je u njemu sacuvan. U ovom slucaju u njegovom ID-u se krije ID samog prozivoda.

Tvoja kreativnost je granica. Ako ti treba vise podataka, mozes imati hidden polja koja ce imati id= "3434_naziv". I kada u funckciji pokupis IDproizvoda i stavis ga u promenljivu mozes napraviti:
document.getElementByID(IDprozivoda + '_naziv').value i tako dobiti neki drugi podatak koji si sacuvao.

Tako imas funkciju koja uvek radi isto, samo u zavisnosti od pokretaca ona barata drugim podacima.
[ Nikola Poša @ 06.01.2012. 10:06 ] @
Nemoj uopšte da koristiš id-eve u tom slučaju, na elementima te forme. Dovoljno je samo da npr. svim tim formama daš neku zajedničku CSS klasu, tipa "form-korpa", i da onda samo preko jednog snippet-a kontrolišeš submit-ovanje svih formi, dakle ovako nešto:

HTML:
Code:
<form class="form-korpa" method="post" action="fnc_korpa.php">
    <input name="trazeno" type="text" size="2" maxlength="3" />
    <input name="did" type="hidden" value="<? echo $r["did"]; ?>" />  

    <input type="submit" value="&gt;" />  
</form>

JS:
Code:
$(document).ready(function() {
    $('.form-korpa').submit(function() {
        var $form = $(this);
        
        $.post($form.attr('action'), $form.serialize(), function(data) {
            $('#korpa').html(data);
        });
        
        return false;
    });
});

Obrati pažnju da je taj button sada "submit", i da form tag sada ima i "action" atribut, koji se posle u JS delu koristi kao "url" parametar za $.post().
[ Ivan Golubović @ 06.01.2012. 12:35 ] @
Hvala obojci na odgovorima.

Nikola, funkcija koju si napisao radi odlično...

plague nov sam u radu sa JS i jQuery-jem, tako da mi i nije najjasnija razlika...