Gacha Posted May 17, 2005 Report Share Posted May 17, 2005 Scripts ir šeit Ir divas kolonas ar laukiem, kur kreisās puses laukus var mainīt vietām klikšķinot uz tiem, bet labās puses lauki ir domāti liekie lauki. Problēma rodas tad, kad kāds elements no kreisās puses tiek pārbīdīts uz labu un mēģina to samainīt vietām ar kādu citu lauku. Es domāju, ka problēma ir saistīta ar globāliem mainīgajiem. Kad izpētat kodu, tad pievēršat uzmanību šai rindai var old_data = new cloneObject(allfields); iekš funkcijas ch_item(). Link to comment Share on other sites More sharing options...
bubu Posted May 17, 2005 Report Share Posted May 17, 2005 (edited) Piebilde - nelabs kods izmantojot globālus mainīgos, pamēģini paklikšķināt tajā kreisajā pusē, kamēr notiek tā flašošana (tb mirkšķināšanās). Kods kautkā liekās lieki sarežģīts. Kautkā slinkums mēģināt iebraukt tajā :) Neņem ļaunā, bet es būtu darījis apmēram šādi (skat beigās linku), ja saprotu tavu domu. Tb tev iekš DB ir kautkādas konstantes, tie elementi, un ir kautkādi izvēlētie elementi, kurus tad jūzeris var pamainīt. Nu tad man tie izvēlētie elementi glabājas selected[] masīvā, bet visi pārējie iekš items[] (kurš sākumā ir aizpildīts pilnībā) skat kodu: http://paste.php.lv/1984 Edited May 17, 2005 by bubu Link to comment Share on other sites More sharing options...
Gacha Posted May 17, 2005 Author Report Share Posted May 17, 2005 Liels paldies bubu, par palīdzību :) Es jau zinu, ka kods nav labs, jo sākumā nebiju domājis taisīt visu tik sarežģītu, tapēc no sākuma nepiedomāju pie tā, bet vēlāk negribējās pārtaisīt un javascriptu nezinu tik labi cik tu, lai zinātu visus knifus. Papētīšu tavu scriptu tā kārtīgāk un uztaisīšu savu līdz galam. Link to comment Share on other sites More sharing options...
Gacha Posted May 18, 2005 Author Report Share Posted May 18, 2005 Es centos pielikt vēl vienu funkciju tam visam, tā ka iezīmē kādu lauku kreisajā pusē un nospiež pēc tam uz kādu no labās puses, tad objekts tiek dzēsts no kreisās puses, bet nezinu visu to javascript sintaksi un ar veselību ar šodien galīgi sūdīgi, tapēc neizdevās. Un nevaru izprast, kapēc kreisās puses laukus kārtojot, no augšas uz apakšu viss ir ok, bet otrādi gan kaut kas nestrādā. paldies jau iepriekš :) Link to comment Share on other sites More sharing options...
bubu Posted May 18, 2005 Report Share Posted May 18, 2005 Ja nu tā fīča vajadzīga manā kodā, tad jāpamaina add_item() funkcija: function add_item(event) { var itemsDIV = document.getElementById('itemsDIV'); var selectedDIV = document.getElementById('selectedDIV'); if (lastElem=="") { // jāpārnes uz kreiso pusi var target = (event.currentTarget?event.currentTarget:event.srcElement); // pārvieto masīvos var obj = getItem(target.id); selected.unshift(obj[0]); // pārvieto uz ekrāna target = itemsDIV.removeChild(target); target = selectedDIV.insertBefore(target, document.getElementById(selected[1])); removeEvent(target, 'mousedown', add_item); addEvent(target, 'mousedown', ch_item); } else { // jāpārnes uz labo pusi var target = document.getElementById(lastElem); target.style.backgroundColor = '#FFF'; // pārvieto masīvos var idx = selected.indexOf(target.id); items.unshift([selected[idx]]); for (var i=idx; i<selected.length-1; i++) selected[i] = selected[i+1]; // pārvieto uz ekrāna target = selectedDIV.removeChild(target); target = itemsDIV.insertBefore(target, document.getElementById(items[1][0])); removeEvent(target, 'mousedown', ch_item); addEvent(target, 'mousedown', add_item); lastElem = "" } } Un kas domāts ar to kārtošanu no augšas uz apakšu? Tipa, pie pievienošanas no labās puses elementiem tos liek nevis kreisajā pusē augšā, bet apakšā? tad add_items() fjā šīs divas rindiņas: selected.unshift(obj[0]); target = selectedDIV.insertBefore(target, document.getElementById(selected[1])); aizstāj ar: selected.unpop(obj[0]); target = selectedDIV.appendChild(target); Link to comment Share on other sites More sharing options...
Gacha Posted May 18, 2005 Author Report Share Posted May 18, 2005 Kārtējo reizi paldies bubu :) Es izmēģināju un tas strādā, un kad jutīšos, kā cilvēks arī izpētīšu, kā tas strādā. un ar to kārtošanu ir domāts nevis tas ko saprati, bet tad kad tu kreisā pusē uzspied uz vienu elementu, un tad uz otru, tie maina kārtību. Šo darbību veicot: ja lastElem ir lielāks par target, tad viss ok, bet ja target ir lielāks, tad nestrādā korekti, cerams, ka šoreiz izteicos mazliet skaidrāk :rolleyes: Link to comment Share on other sites More sharing options...
bubu Posted May 18, 2005 Report Share Posted May 18, 2005 (edited) Es laikam nesaprotu ideju tai pārbīdei.. Cik biju no tava koda sapratis, tad augšējais elements tiek ielikts apakšējā elementa vietā, bet visi elementi, kas bija pa vidu, tie tiek pārbīdīti par vienu uz augšu. Vai kautkā citādi vajadzēja? Edited: pamēģini šādu ch_items() fju. Tā vajag? function ch_item(event) { var target = (event.currentTarget?event.currentTarget:event.srcElement); if (lastElem == '') { // pirmā reize lastElem = target.id; target.style.backgroundColor = '#CCC'; } else if (lastElem == target.id) { // otrā reize uz tā paša elementa lastElem = ''; target.style.backgroundColor = '#FFF'; } else { // otrā reize uz cita elementa document.getElementById(lastElem).style.backgroundColor = '#FFF'; // atrod elementu indeksus var idx1 = selected.indexOf(lastElem); var idx2 = selected.indexOf(target.id); var selectedDIV = document.getElementById('selectedDIV'); var child1 = document.getElementById(lastElem); // ņems ārā var child2 = document.getElementById(target.id); // liks pirms šī elementa var tmp = null; // aiz kā ielikt izņemto elementu var first = selected[idx1]; // pārbīdīšanā pārrakstīsies pirmais elements if (idx1<idx2) { tmp = child2.nextSibling; for (var i=idx1; i<idx2; i++) // pārbīda masīvā selected[i] = selected[i+1]; } else { tmp = child2; for (var i=idx1; i>idx2; i--) // pārbīda masīvā selected[i] = selected[i-1]; } selected[idx2] = first; // atjauno pirmo elementu // pārbīda uz ekrāna child1 = selectedDIV.removeChild(child1); if (tmp) selectedDIV.insertBefore(child1, tmp); else selectedDIV.appendChild(child1); // sāk flešošanu lastElem = ''; flash(0, selected[idx1], selected[idx2]); } } Edited May 18, 2005 by bubu Link to comment Share on other sites More sharing options...
Gacha Posted May 19, 2005 Author Report Share Posted May 19, 2005 (edited) Tnx, tagad viss ir ok un strādā pareizi, liels paldies :) Es nekad nebiju strādājis ar html izveidi čerez javascript (visi tie node un childnode), tapēc man šis bija kas jauns un tapēc ar nezināju, kur un kas, bet labi ir tas, ka te ir izpalīdzīgi cilvēki. Edited May 19, 2005 by Gacha Link to comment Share on other sites More sharing options...
Recommended Posts