Jump to content
php.lv forumi

Lynx

Reģistrētie lietotāji
  • Posts

    228
  • Joined

  • Last visited

Everything posted by Lynx

  1. Pēc labi daudz literatūras izlasīšanas un ārzemju forumu studēšanas, tika nospriests par šādu variantu, kas varbūt nav drošakais (rakstīt atsevišķu daemonu, kas to kontrolē), bet toties pilnībā kontrolējams PHP galā. Memcache serveru konfigurāciju rakstīt atsevišķā konfigurācijas failā un, ja sastopamies ar kādu kļūdu piekonektējoties memcachei - tad pārakstam konfigurācijas failu ar php, norādot, ka šis serveris ir neaktīvs un lai nākamie pieprasījumi nemaz nemēģina uzreiz konektēties šim serverim. Tapēc, ka serveris ir flagots kā neaktīvs hash struktūra netiek izjaukta un citu serveru darbība netiek ietekmēta, jo failover ir atslēgts. Paralēli tiek padota mums info, ka bija problēma - mēs atrisinam problēmu, iztīram visas vērtības un manuāli nomainam memcache konfigurāciju uz webserveriem. Lielāks čakars toties nekad nevajadzētu atgriezties novecojušām vērtībām.
  2. Jāpadarbojas nedaudz ar nekromanciju un jāatgriežas atkal pie problēmas risinājuma - vakar vienam memcache serverim sanāca pussprāgt. @klez, mēs nevaram glabāt cookija info par to kurā memcachē atrodas vērtība, jo mēs paši nezinam - ir vienkārši klusters un consistent hashing algoritms, kas pats izvēlas kurā serverī rakstīt un meklēt info. par to web serverim nedodot nekādu info. Teorētiski varētu norādīt, lai katrs webserveris slēdzas klāt tikai vienam memcache serverim, bet tad zustu memcache clusterošanas jēga. Tas ko mēs realizējām bija Kaklz ieteiktais risinājums - atslēgt failover un pārgājām uz consistent hashing algoritmu. Tas atrisināja problēmas, ka uz citiem serveriem saglabājas vecas vērtības, kuras varēja iegūt, ja primārais serveris nosprāga. Ar performanci, ja kaut viens no memcache serveriem darbojās lielas problēmas nav - īslaicīgi var pārdzīvot un salabot problēmu. Bet vakar sastapāmies ar problēmu, ka viens un tas pats serveris nogļukoja īslaicīgi. Situācija šāda skatoties no viena lietotāja skatupunkta: Sāka neatbildēt memcache B (vērtības netika iztīrītas no cache) Pieprasījums 1 - nevarēja pieslēgties memcache serverim B un tapēc izvilka dažus datus no sql un updeitoja sql. Memcache A, C tika updeitota. Memcache B netika updeitota. pēc vairākiem pieprasījumiem memcache B atgriezās Pieprasījums 6 - pieslēdzās visiem memcache serveriem, no B saņēma vecas vērtības un viss aizgāja pa pieskari, jo ir noticis datu zudums. Ar A un C serveriem pēdējās vērtības, kas rada vēl sliktāku effektu, ka cilvēki ir iztērējuši kādas lietas un nav ieguvuši rezultātu vai otrādāk. Pašlaik sākam skatīties uz Codez pieminēto 1o risinājumu par kādu monitoringa daemonu. Itkā ir Moxy, kas darbojas kā Proxy http://code.google.com/p/moxi/ un izskatās, ka var arī monitorēt cache stāvokli. Bet tad viņš izvērstos par single point of failure. Varbūt ir vēl kādas idejas?
  3. Tas arī risinājums, nedaudz bail ir par to, ka ja patiesi kāds no memcache serveriem nomirst, nevis vienkārši netiek galā ar slodzi, tad failovera neeksitēšana mūsu datubāzi kaut kādā brīdī arī nogalinātu. Kas ir vēl ļaunāk. Tapēc šeit šķiet, ka tomēr jāizdomā kāds koda risinājums, kas būtu pietiekami ātrs un effektīvs. Pašlaik, kamēr nav labākas idejas, esmu ķēries pie pirmā risinājuma realizēšanas, redzēs kādi zemūdens akmeņi vēl parādīsies.
  4. Pamēģini izmantot session_write_close(); šādi iespējams uzreiz izsaukt sesijas ierakstīšanu pat no koda vidus: for ($i = 0; $i < 10; $i++) { session_start(); $_SESSION['asd'] = $i; session_write_close(); }
  5. Sveiki, esam projektā saskārušies ar vienu problēmu un vēlējos pakonsultēties varbūt cilvēkiem ir idejas kā vislabāk šo jautājumu risināt. Situācija ir tāda, ka ir mums ir 3 memcache serveri, kas visi tiek izmantoti clusterī. Un pa retam ļoti lielas noslodzes gadījumos var sanākt sastapties ar timeoutu konektējoties kādam no memcache serveriem. Tas ko dara memcache tajā brīdī ir pārveido serveru hašu un seto() ierakstu kādā citā serverī, kas tajā brīdī ir pieejams. Nākamajos requestos pastāv iespēja, ka pirmais serveris, kuram agrāk neizdevās piekonektēties atkal ir pieejams un klients paņem vecos datus, kas rada būtiskas sinhronizācijas problēmas. Šeit ir aprakstīta situācija angliski: http://code.google.c...re,_or_Failover (mūsu gadījumā gan nav tīkla vada izraušana :D) Ātri radās divi risinājumi: 1 risinājums: Katram ierakstam ko mēs liekam memcachē datus vienmēr likt masīvā un masīvā obligāti pievienot jaunu lauku, piemēram: write_time izveidot atsevišķu memcache ierakstu: memcache_[user_id], kur masīvā glabājas visi konkrētā lietotāja memcache ieraksti ar write_time vērtībām Kad veicam get() salīdzinam vai memcache_[user_id] ieraksta write_time sakrīt ar izvilkto datu write_time, ja nesakrīt uzskatam, ka ieraksts ir nederīgs un velkam datus no DB Ja nu gadījumā neeksistē ieraksts memcache_[user_id] - velkam pilnīgi visu no db Lielākais mīnus ir ka nākas izmantot datu lauku un papildināt to ar papildus vērtību. Un ja orģināli bija plānots ielikt memcachē stringu vai tīri int, tad tagad būs nepieciešams array. 2 risinājums: Modificēt pašas atslēgas, piemēram, veidot tās šādi: "nosaukums_[user_id]_[key]" un sastopoties ar Timeout kļūdu palielināt $key. Problēma ir ka pašlaik jāizdomā kur glabāt šo key vērtību - visticamāk datubāzē, bet tas prasīs veikt papildus selektu datubāzei no kā vēlamies izvairīties. Mēs nevaram rakstīt šo vērtību sesijās, jo sesijas arī uztur memcache. Vēl ir ideja, ka tās varētu pieglabāt APC cachē, kuru mēs arī izmantojam, bet tad konkrētās vērtība ir piesaistīta noteiktam webserverim, kas nozimē pēc refresha, ja trāpīs uz cita webservera būs nepieciešama pilnīga memcache ielāde no db, jo $key neeksistē, kaut gan ar datiem viss ir ok. Ir kādas idejas vai pieredze šajā jautājuma?
  6. Tātad lieta sekojoša uz konkrēta elementa lapā ir 3 eventi. onmousedown, onmouseup un tagad arī dblclick. Vai ir iespējams izveidot kādu mehānismu, lai taisot dblclick mousedown un mouseup nenostrādā? Cik saprotu, tas nav īsti iespējams, jo mousedown un up tiek divreiz palaisti pirms tiek palaists arī dblclick? Vai tomēr ir kāds viltīgs mehānisms? Piemēram veidot delay uz paša mousedown effekta izpildei? Attiecīgi nospiežam mousedown un ja ļoti ātri seko mouseup atceļam mousedown. Kāds ir kaut ko līdzīgu veidojis?
  7. bubu, jo: ALTER TABLE `items` CHANGE `type` `type` ENUM( 1, 2, 3 ) NOT NULL MySQL said: Documentation #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1,2,3) NOT NULL' at line 1 Attiecīgi visām enum norādītajām vērtībām jatiek ievadītām pēdiņās. Ja pareizi sapratu tavu pretjautājumu uz manis teikto. Jo vienozīmīgi pašos ierakstos pēdiņas netiek lietotas un nemaz nevar tikt lietotas. Marrtins, nu izlasot, ka tinyint ir bool, sapratu, ka var būt tikai divas vērtības. Tagad veicu testus un sapratu, ka esmu kļūdījies, tātad problēmām nevajadzētu būt :)
  8. Nedaudz papētiju šo jautājumu internetā un izskatās, ka no ērtības ziņas un arī ātruma ziņā vislabāk gan ir izmantot enum un aizpildīt pašas vērtības, nevis atstāt kā '1','2', jo tas neko nemaina. Kā arī tinyint(1) mysql uztver kā bool, kas varētu radīt problēmas. http://www.mysqlperformanceblog.com/2008/0...what-is-faster/ http://dev.mysql.com/doc/refman/4.1/en/oth...data-types.html
  9. Grūti teikt, bet teorētiski lauks = 'tips1', gadijumā mysql būtu javeic viens lieks solis un janoskaidro kura vērtība atbilst iekšējāi vērtībai, bet ja vēršamies pa taisno WHERE lauks = 1, teorētiski varētu iztikt bez tā viena soļa. Bet tā ir spekulācija. Bet vairāk jautājums aiziet kādu variantu jūs izmantojat un kapēc tieši tā? Vai arī es te aizeju jau uz pārāk maznozīmīgiem jautājumiem datubāžu izstrādē? :)
  10. Šodien uzdūros interesantam rakstam, kas pastāstīja kā patiesībā strādā enum lauka tips un tas radīja uzreiz interesantus jautājumus, jo tieši tagad ar to jastrādā. Attiecīgi, īsumā, piemēram, laukam ar tipu enum('0','1') vērtības datubāzes iekšienē tiek saglabātas kā 1,2 Un taisot selectu Select lauks FROM something WHERE lauks= 1, mums izvadīs 0. Bet WHERE lauks = "1" mums arī izvadīs to 1. Tas īstenībā, iespējams, kaut kad daudziem programmētājiem arī ir radījis neparedzētus rezultātus :) Bet jautājums ir šāds: Parasti es lieku enum laukā int vērtības, piemēram '0','1','2','3' etc.(kas katra reprezentē kādu, piemēram, preces tipu). Jo uzskatīju, ja es vērsīšos pie int un selektošu kā WHERE lauks = "1", tas būs ātrāk, nekā ja es enum veidotu 'tips1','tips2' un selektotu kā WHERE lauks = "tips2". Bet izlasot šo rakstu, cik es noprotu , es esmu būtiski kļūdījies savā uzskatā par ātrumu? Vai vislabākais(ņemot vērā ērtumu un ātrumu) variants nav veidot šādi: enum('tips1','tips2',etc) un selektot kā WHERE lauks = 1? Tas attiecīgi man novērstu nepieciešamību pēc komentāra šim laukam datubāzē, kas norāda katram ciparam atšifrējumu. Bet pats selekts notiku pēc iekšējās uzglabāšaas vērtības, kas vispār neliktu veikt satura apskati. Otrs jautājums, kā vispār ir ar tabulas lauku komentāriem? Tie kaut ko ietekmē no ātrdarbības viedokļa?
  11. Ah skaidrs, liels paldies, ka izskaidroji. Saskāros ar interesantu problēmu tā algoritma realizācijā. Pats algoritms teorētiski strādā un ar pašreizējo ātrumu aptuveni sekundes laikā izvada vērtības ar 1px intervālu. Bet pats browseris(testēju gan tikai uz FF2) nerenderē konteinera izstiepšanu pa soļiem(bet parāda pēc loopa jau uzreiz pēdējo konteinera height): var max = 112; var ele = document.getElementById(id); var s = parseInt(ele.style.height); var timeStart = new Date().getTime(); var timePos = 0; var s = 0; while(s < max) { timePos = new Date().getTime(); s = Math.round(s + 0.1*(timePos-timeStart)); timeStart = new Date().getTime(); if(ele.style.height != s+'px') { ele.style.height = s + 'px'; // ele.style.display = 'none'; // ele.style.display = 'block'; // var n = document.createTextNode(' '); // ele.appendChild(n); // ele.removeChild(n); // this.draw(ele, s); //alert(s); } } Atkomentētie bija meiģinājumi panākt, lai FF2 tomēr pamaina arī pa soļiem izmēru. Uzraku googlē piemērums, velti pieminēt, ka nepalīdz.
  12. O, paldies, palaidu tagad setTimeout, ka var padot objektu, bet kā jau minēju 2ajā koda blokā - es arī teorētiski veicu tās nepieciešamās izmaiņas, lai nenotiktu objekta saskaitīšana ar stringu: Izsaucam šādi(ele tiek padots bez pēdiņām, kam teorētiski vajadzētu nozīmēt, ka viņs nemeiģina typecastot): setTimeout("Interface.unrollEle("+ele+","+max+");",10); Un pēc tam saņemot parbaudam vai ir objekts vai strings un tad arī attiecīgi rīkojamies: var ele typeof id == 'object' ? id : document.getElementById(id); Bet kaut kas tāpat nepatika. Izmantojot tavu variantu un padodot vienkārši funkciju viss normāli. Bet lagošanas problēmu tas neatrisināja. Izskatās, ka vienkārši pats setTimeout sāk bremzēt pēc ilgām sessijām. Būs jāpameiģina Eilera integrēšanas metode loopā.
  13. Pašlaik esmu sastapies ar nelielu problēmu, ka dažādas animācijas pēc ilgākas browsera stāvēšanas vaļā sāk lagot(notiek animācija plūstoši pussekundi, talāk neliela pauze un tad atkal aiziet plūstoši, līdz nopauzē atkal). Un te es sāku domāt variantus kā varētu šo lietu atrisināt pašreizējais variants izmanto šādu setTimeut metodi. var Interface { unrollEle : function(id, max) { if(!max) return; var ele = document.getElementById(id); var eleH = parseInt(ele.style.height); if(eleH < max) { ele.style.height = eleH + 1 + 'px'; setTimeout("Interface.unrollEle('"+id+"',"+max+");",10); } } Pirmā ideja optimizācijai bija nemeklēt visu laiku to objektu(nomainīju attiecīgas rindiņas uz šādu variantu): var ele typeof id == 'object' ? id : document.getElementById(id); setTimeout("Interface.unrollEle("+ele+","+max+");",10); Tas viss beidzās ar firebug izmestu erroru: missing ] after element list [break on this error] Interface.unrollEle([object HTMLDivElement]); Meklēju googlē un vienīgais atrisinājums, kas tika dots bija izmantot manu pirmo variantu :D Vai tomēr ir kāds triks, kā padot elementu caur setTimeout? Tālāk paskatījos, kā citi risina šīs problēmas. script.aculo.us izskatās, ka izmanto time based loopu. Man parasts loops iziet tik ātri ka nav iespējams pat īsti saskatīt animāciju. Tad rodas jautājums kā viņi ir īsti panākuši, ka piemēram tieši vienā sekundē izpildās visa animācija? Parasts loops ar ifu, kas salīdzina mikrosekundes? Izklausās pārāk vienkārši, jo te izskatās, ka tiek apreiķinātas visas animācijas: loop: function() { var timePos = new Date().getTime(); for(var i=0, len=this.effects.length;i<len;i++) this.effects[i] && this.effects[i].loop(timePos); } Un šeit izpildītas: loop: function(timePos) { if (timePos >= this.startOn) { if (timePos >= this.finishOn) { this.render(1.0); this.cancel(); this.event('beforeFinish'); if (this.finish) this.finish(); this.event('afterFinish'); return; } var pos = (timePos - this.startOn) / this.totalTime, frame = (pos * this.totalFrames).round(); if (frame > this.currentFrame) { this.render(pos); this.currentFrame = frame; } } } Citi varianti šadu te paužu novēršanai?
  14. Hmm šis variants strādā. Tikai nepieciešams vēl viens uzlabojums: japārkopē arī visi eventi, kas pievienoti ar addEventListener. Pētiju internetā itkā uzgāju ka Mootools ir funkcija cloneEvents, bet tas viss pa sarezģītu manai saprašanai. Cik noprotu, laikam references uz visiem eventiem tiek glabātas atsevišķā objektā, no kurienes arī priekš kopijas tiek paņemti dati. Jo uz paša elementa nav nekur minēts par šiem eventiem. Un lai visu sistēmu pārtaisītu uz šādu variantu, diezgan daudz darba. Japameklē vēl informācija.
  15. Tātad parastais cloneNode manā gadijumā ir par vāju, jo nepieciešams nokopēt arī visus eventus un properitijus, kas mākslīgi pievienoti elementam. Šis ir mans variants cik nu tālu esmu ticis un te arī iesprūdu(sīkāki komentāri kodā): function copyNode(ele, id) { var copy = ele.cloneNode(true); for(var item in ele) { copy.item = ele[item]; // Bez effekta, nav kludu, bet nav arī rezultāta //copy[item] = ele[item]; // Izmet kļūdu: setting a property that has only a getter } if(id) { copy.id = id; } return copy; } Cik saprotu, man ir jāatrod kāds veids, kā atsijāt tas vertības, kuras nevar pielikt, bet pašlaik nav ideju kā to izdarīt. Ar typeof nesanāca atrast isto variantu.
  16. Hah, patiesi labs - nebiju iedomājies mainīt pieeju, bet stingri ieciklējos uz Eol jautājumu, paldies. Bet tad paliek jautājums, tīri intereses pēc, kāpēc JS tā dara un redz arī line endingus, kādos gadījumos, tas reāli var noderēt?
  17. Palasiju oop js topikā minētos linkus un nolēmu attīrit visus tagus no eventiem un pariet uz addEventListener izmantošanu attiecīgi - unobtrusive javascript. Un te sastapos ar interesantu lietu: Ir divs ar diviem atteliem un katram no tiem jauzliek unikals events, tapeec vienkarshi loopot cauri childNodem nešķita pareizi un nevelejos katram likt unikalu id, tapēc izdomāju darīju šādi: <div id="some_div"> <img /> <img /> </div> //js failaa pec body.onload some_div.childNodes[0].addEvent.... Un kā izrādās 0tais elements ir \r\n, attiecīgi visi enter, kas nospiesti indentācijai, iejaucas pa vidu un reali es abiem attēliem varu piekļūt izmantojot [1] un [3]. Ja es nodzēšu linebreakus un atstāju<div id="some_div"><img /><img /></div>, tad varu piekļūt <img> elementiem ar [0] un [1] - tieši kā manuprāt jabūt. Tad jautājums šāds, vai ir kāds veids kā apvienot indentāciju un, lai <img> būtu, kā 0tais un 1ais elements? Meiģināju mainīt Eol tipu uz unix, tas nepalīdzēja un citas idejas nav.
  18. Lynx

    OOP js

    Eh, mefisto, es nejautāju par pamatiem, bet vairāk par ideoloģiju aiz objekt orientēta js izmantošanas. Jo lielākā daļa rakstu par šo tēmu paņem oop kā status quo. Un nekur neapspriež galvenos mīnusus vai arī kad tieši loģiski būtu viņu izmantot. Situācija ir tāda, ka pašlaik mans kods darbojas precīzi kā vajag un pilda savu funkciju, bet es vienmēr meklēju veido kā to uzlabot(gan lai pašam ērtāk, gan ātrāk darbojas) un šis šķita nākamais loģiskais solis un tieši tāpēc vēlējos dzirdēt citu viedokli. Un daži to arī izteica, paldies.
  19. Vēlējos noskaidrot cilvēku domas par objektu izmantošanu javascriptā. Pamazām attīstot projektu ir sarakstītas kopā ļoti daudz funkcijas, un bieži daļa funkciju būtu klasificējamas kā atsevišķa vienība lapas funkcionalitātes nodrošināšanai, piemēram, dragošana vai tooltipi. Bieži šīs te funkcijas ik pa laikam izmanto globālos mainīgos, lai padotu datus, piemēram, tā pati dragošana: var _dragElement; glabā pašreiz kustināmo objektu, lai piemēram, function doDrag(e){ if (e == null) var e = window.event; _dragElement.style.left = (_offsetX + e.clientX - _startX) + 'px'; _dragElement.style.top = (_offsetY + e.clientY - _startY) + 'px'; } Nebūtu katreiz jameklē, kurš objekts tiek kustināts. Un tātad jautājums: vai ir loģiski šīs funkcijas un globālos mainīgos sabāzt atsevišķās klasēs, piemēram: var Drag = { }, lai nepiesarņotu vidi ar globālajiem mainīgajiem un kā tas attieksies uz koda performance?(Ar FF3 gan izskatās, ka tā vairs nekur nebūs problēma, bet tāpat interesē :))
  20. Wow, kā tu spēji atšifrēt viņa teikto? :D
  21. $settings pašlaik tev vēl ir querija resource objekts. Lai izvilktu datus tev jāveic datu atgriešana no querija. Es vienas vērtības atgriešanai izmantoju šādu variantu: $query = mysql_query('SELECT title FROM settings'); list($settings) = mysql_fetch_row($query);
  22. Ak, dies... nezinu gan kur tu manuāli esi redzējis tādu piemēru, tu pašlaik katram ierakstam vēl velc arā datus no tās pašas tabulas. Un piedevām diezgan nesekmīgi... Reali tev pietiek ar šo: $query = 'SELECT title, url FROM ats_sites ORDER BY join_date DESC LIMIT 3'; $result = mysql_query($query) or die('Query failed: ' . mysql_error()); while($row = mysql_fetch_assoc($result)) { echo '<br/> <a href="'.$row['url'].'">'.$row['title'].'</a>'; }
  23. 1) Neiesaku selectaa izmantot * 2) Nesaprotu, priekškam tu izmanto, comment_ prefixu katram laukam, ja skaidri redzams, ka tabula ir comments. 3) Lai izdarītu to, ko vēlies vienkārši nepieciešams pārbaudīt, kāds komentāra tips tas ir un izvadīt atbilstošu linku. $sql = dbquery("SELECT comment_item_id, comment_message, comment_type FROM ".$db_prefix."comments WHERE comment_type='N' OR comment_type='P' ORDER BY comment_datestamp DESC LIMIT 10"); while($data = dbarray($sql)) { echo '<img src="'.THEME.'images/bullet.gif"> <a href="http://www.kaukassdsdsf.lv'.($data['comment_type'] == 'N' ? '?lasit=' : 'bildes/blaablaa/?bilde_id=').$data[comment_item_id].'" title="'.$data[comment_message].'">'.trimlink($data[comment_message], 25).'</a><br>'; } Edit. Eh, nepamaniju, ka Aleksejs arī sāka rakstīt atbildi. Nu vienalga lai iet arī mans variants.
  24. Lynx

    Slīdoši banneri

    Hah, Mikijs, tu tikai izliecies? :) Viņam vajadzīgs js kods, kas kustina to divu Īsumā šādi: <div id="move" style="position: absolute; z-index: 3;">te teksts</div> <script>function move() { var obj = document.getElementById('move'); obj.style.top = parseInt(obj.style.top) + 2 + 'px'; setTimeout("move()", 10); } </script> Aptuveni šādi, nenotestēju. Pamaini kustināšanai nepieciešamos lielumus un objekta sākuma pozīciju pēc saviem ieskatiem.
  25. Tātad vienam ļoti dinamiskam projektam savedu kārtībā drag & drop. Bet problēma rodas ar to, ka ir nepieciešama sarežģītāka eventu handlošana un es nevaru izlemt par elegantāko risinājumu. Tātad pašlaik, katram definētajam objektam, kuru ir iespējams dragot ir definēts mērķis uz kurieni jaizvelk. Tālāk mēs nosakam vai pele atlaišanas brīdi ir uzzvilkta uz mērķa objekta(cik saprotu šis ir labākais variants, jo dažos browseros, dragojamais attēls, piemēram, būtu priekšā mērķim un var rasties problēmas.) var target = document.getElementById(_dragTarget); var targPos = getPosition(target); if((e.clientX > targPos.x) && (e.clientX < (targPos.x + parseInt(target.offsetWidth))) && (e.clientY > targPos.y) && (e.clientY < (targPos.y + parseInt(target.offsetHeight)))){ target.appendChild(_dragElement); Ja ir robežās tad šo te dragojamo objektu appendojam kaa childu mērķim. Un te rodas jautājums, vai ir iespējams ka target objekts, pēc tam kad viņam ir appendots childs pats izsauc funkciju? Onchange, cik es testēju darbojas tikai formas elementiem. Ar onclick, pēc literatūras ir problēmas ar IE(neesmu testējis, nav IE :D), un firefox cik testēju onclick paspēj izpildīties vēl pirms dragojamais elements ir appendots. Teorētiski varētu šo jautājumu risināt arī pašā dragošanas kodā, bet tas nav īsti loģiski, jo ši funkcija atbild par dragošanu. Bija ideja, ka target divam uzlikt to pašu onchange, kurš kā jau minēju man nedarbojas, lai nebojātu dom ar neeksistējošiem elementiem: <div onchange="izsaucamaa_funkcija();"></div> Un pēc tam kad appendojam childu veikt pārbaudi if(target.getAttribute('onchange')) { eval(target.getAttribute('onchange')); } Bet šis īsti nešķiet elegants risinājums, jo izmanto eval... Jūsu domas?
×
×
  • Create New...