[ ColdKeyboard @ 30.07.2008. 15:15 ] @
Imam mali problem sa skriptom koju sam napisao za online konfigurator....

Code:

function konfig(objekat, cijenaartikla) {

    eval("document.konfigurator." + objekat + "cijena.value = cijenaartikla");
    
    var monitor = document.konfigurator.monitorcijena.value;
    var maticna = document.konfigurator.maticnacijena.value;
    var procesor = document.konfigurator.procesorcijena.value;
    var ventilator = document.konfigurator.ventilatorcijena.value;
    var harddisk = document.konfigurator.harddiskcijena.value;
    var memorija = document.konfigurator.memorijacijena.value;
    var graficka = document.konfigurator.grafickacijena.value;
    var tvkartica = document.konfigurator.tvkarticacijena.value;
    var cddvd = document.konfigurator.cddvdcijena.value;
    var stampac = document.konfigurator.stampaccijena.value;
    var skener = document.konfigurator.skenercijena.value;
    var faxmodem = document.konfigurator.faxmodemcijena.value;
    var multimedija = document.konfigurator.multimedijacijena.value;
    var kuciste = document.konfigurator.kucistecijena.value;
    var mis = document.konfigurator.miscijena.value;
    var tastatura = document.konfigurator.tastaturacijena.value;    
    var zvucnici = document.konfigurator.zvucnicicijena.value;
    var zvucna = document.konfigurator.zvucnacijena.value;
    var floppy = document.konfigurator.floppycijena.value;
    var igracki = document.konfigurator.igrackicijena.value;
    var ups = document.konfigurator.upscijena.value;
    var hub = document.konfigurator.hubcijena.value;
    var mreza = document.konfigurator.mrezacijena.value;
    
    var novasuma = Number(monitor) + Number(maticna) + Number(procesor) + Number(ventilator) + 
Number(harddisk) + Number(memorija) + Number(graficka) + Number(tvkartica) + Number(cddvd) + Number(stampac) + 
Number(skener) + Number(faxmodem) + Number(multimedija) + Number(kuciste) + Number(mis) + Number(tastatura) + 
Number(zvucnici) + Number(zvucna) + Number(floppy) + Number(igracki) + Number(ups) + Number(hub) + Number(mreza);
    
    document.konfigurator.suma.value = novasuma + ' KM';


}



Imam formu 'konfigurator' i u njoj nekoliko <select> objekata i <input> polja.


Iz <select> polja kada se odabere neki item npr. iz polja Maticna Ploca odabere se neki item i onda se poziva funkcija konfig() koja salje ime input polja koje treba da se izmjeni i vrijednost odabranog itema iz select polja.


U firefox-u sve radi bez problema ali u IE nece ni da mrdne...

Probavao sam da u kodu zamjenim document.konfigurator sa window.document.konfigurator ali ne pomaze, takodje probao sam i document.all.konfigurator. ali nista od toga nije radilo u IE.
[ Nikola Poša @ 30.07.2008. 16:14 ] @
Probaj da umesto te funkcije Number() koristish parseInt() za prebacivanje stringa u broj... Mozhda je to zbunilo IE...
[ ColdKeyboard @ 30.07.2008. 16:39 ] @
Probao sam ne pomaze...

Da li ima neki debugger za IE kao sto ima recimo FireBug za firefox ?

[ Aleksandar Ružičić @ 30.07.2008. 18:29 ] @
jednostavno dodaj svakom elementu odgovarajuci id i onda citaj/pisi vrednosti pomocu getElementById("id-tog-elementa").value, to ce (provereno) raditi u svim browserima.
[ Nikola Poša @ 30.07.2008. 20:05 ] @
Citat:
ColdKeyboard Da li ima neki debugger za IE kao sto ima recimo FireBug za firefox ?

Koliko ja znam, kad se desi neka greshka na stranici IE o tome obavesti u status bar-u, u donjem levom uglu, i tu onda mozhesh da pogledash u chemu je stvar kad dvokliknesh na tu greshku...

btw Evo ovde ima neshto o debugger-u za IE: http://www.jonathanboutelle.co...s/2006/01/howto_debug_jav.html.
[ ColdKeyboard @ 30.07.2008. 23:00 ] @
Evo promjenio sam da bude getelementbyid() ali i dalje ne radi u IE :S


Evo kako sada kod izgleda...

Code:

function konfig(objekat, cijenaartikla) {

    document.getElementById(objekat + "cijena").value = cijenaartikla;
    
    //Sumiramo sve cijene
    var monitor = document.getElementById("monitorcijena").value;
    var maticna = document.getElementById("maticnacijena").value;
    var procesor = document.getElementById("procesorcijena").value;
    var ventilator = document.getElementById("ventilatorcijena").value;
    var harddisk = document.getElementById("harddiskcijena").value;
    var memorija = document.getElementById("memorijacijena").value;
    var graficka = document.getElementById("grafickacijena").value;
    var tvkartica = document.getElementById("tvkarticacijena").value;
    var cddvd = document.getElementById("cddvdcijena").value;
    var stampac = document.getElementById("stampaccijena").value;
    var skener = document.getElementById("skenercijena").value;
    var faxmodem = document.getElementById("faxmodemcijena").value;
    var multimedija = document.getElementById("multimedijacijena").value;
    var kuciste = document.getElementById("kucistecijena").value;
    var mis = document.getElementById("miscijena").value;
    var tastatura = document.getElementById("tastaturacijena").value;    
    var zvucnici = document.getElementById("zvucnicicijena").value;
    var zvucna = document.getElementById("zvucnacijena").value;
    var floppy = document.getElementById("floppycijena").value;
    var igracki = document.getElementById("igrackicijena").value;
    var ups = document.getElementById("upscijena").value;
    var hub = document.getElementById("hubcijena").value;
    var mreza = document.getElementById("mrezacijena").value;
    
    var novasuma = parseInt(monitor) + parseInt(maticna) + parseInt(procesor) + parseInt(ventilator) + 
parseInt(harddisk) + parseInt(memorija) + parseInt(graficka) + parseInt(tvkartica) + parseInt(cddvd) + 
parseInt(stampac) + parseInt(skener) + parseInt(faxmodem) + parseInt(multimedija) + parseInt(kuciste) + 
parseInt(mis) + parseInt(tastatura) + parseInt(zvucnici) + parseInt(zvucna) + parseInt(floppy) + parseInt(igracki) + parseInt(ups) + parseInt(hub) + parseInt(mreza);
    
    document.getElementById("suma").value = novasuma + ' KM';


}


[ agvozden @ 30.07.2008. 23:27 ] @
Moraćeš da pronađeš u kom delu koda se nalazi greška.

Ukoliko nemaš debuger onda stavi alert iza određenog bloka koda pa prati...

Moguće je da neki element ne postoji u formi... mada bi to trebalo da se odrazi i na firefox.

Ja bih ovo provukao kroz petlju, možda bih koristio i array ( konfig[mem] ) i obavezno promenljivu za zbir

onda bih koristio test izraze if (konfig[mem].value) zbir = zbir + konfig[mem].value

[ ColdKeyboard @ 30.07.2008. 23:39 ] @
Znaci ubacio sam ovaj Microsoft Script Debugger i recimo pokrenem ovakvu skriptu


Code:

function konfig(objekat, cijenaartikla) {
    if (document.getElementById) {

        document.write('objekat - cijenaartikla');
    }
}



I IE izbaci gresku odmah na prvoj liniji tj. if (document.getElementById) {

dok u FF fino ispise ovaj tekst... :S

Ne znam u cemu je problem :(
[ ColdKeyboard @ 31.07.2008. 00:06 ] @
Koliko sam primjetio u FF radi kako treba li IE sa debuggerom prijavljuje 'document.getElementById() is null or not an object...' :S

Kako ovo da rjesim :(

Znaci IE zablentavi odmah na pocetku kod

document.getElementById(objekat).value = cijenaartikla;
[ Aleksandar Ružičić @ 31.07.2008. 04:12 ] @
getElementById ne moze da "zablentavi" ukoliko element sa tim id-om postoji.

recimo da imas ovakav html:
Code:

<input type="text" id="monitorcena" name="monitorcena" />
<input type="text" id="maticnacena" name="maticnacena" />
<input type="text" id="procesorcena" name="procesorcena" />

ukoliko hoces da saberes vrednosti u ta tri textboxa to mozes da uradis ovakvim javascriptom:
Code:

var fields = ["monitorcena", "maticnacena", "procesorcena"];
var sum = 0, field = null;

for (var i = 0; i < fields.length; i++)
{
   if (field = document.getElementById(fields[i])) sum += parseInt(fields[i].value);
}

alert(sum);
[ ColdKeyboard @ 31.07.2008. 10:59 ] @
Znaci ne mogu da vjerujem... probao sam sve sto ste mi ovdje napisali i sve radi u FF ali nista u IE :S

Ne znam vise u cemu bi mogao biti problem...


Evo okacio sam .html fajl pa ako nekome nije mrsko da pogleda, ja nisam bas puno radio sa JS tako da mozda ne vidim neku pocetnicku gresku...
[ Nikola Poša @ 31.07.2008. 12:19 ] @
Evo modifikovao sam malo onaj tvoj kod, i napisao sam primer samo za tri reda tabele, pa ti ako hocesh samo dodaj i za ostale komponente. Sad radi i u Firefox-u i u IE-u... Obrati pazhnju da sam sada za svaki onaj select definisao dogadjaj onChange, pa onda u scriptu uzimam value u zavisnosti od izabrane opcije. Ako ti nije jasno shta sam sve radio i shta sam sve izmenio, ti slobodno pitaj...

Okachio sam .html fajl, pa ti isprobaj...
[ Aleksandar Ružičić @ 31.07.2008. 14:01 ] @
razlog sto ti nije radilo u IE je sto taj browser nema onclick handler za option elemente. ispravan nacin je da koristis onchange na select elementu, kao sto je raynor uradio.

evo imam malo slobodnog vremena, pa sam ti napisao funkciju koja ce da ti skrati kucanje, dovoljno je samo da svakom selelect boxu dodas class="changeprice" i svakom textboxu class="price" (znaci ne treba ti onchange ili bilo koji drugi handler), i ubacis ovaj javascript:
Code:

$(function()
{
   var textbox = $('.price');

   $('.changeprice').each(function(i)
   {   
        $(this).change(function()
        {
           $(textbox[i]).val(this.options[this.selectedIndex].value);
           
           var sum = 0;
           textbox.each(function(){ sum += parseInt( $(this).val() ); });

           $('#totalsum').val( sum + ' KM');    // ovde samo stavi id textboxa u koji ce da ti pise ukupna cena
        });
   });
});

e da, ova scripta zahteva jQuery biblioteku (toliko sam navikoa na nju da sam zaboravio da programiram DOM na klasican nacin :p)



p.s. ovaj kod nisam isprobavao ali bi trebalo da radi...
[ ColdKeyboard @ 31.07.2008. 16:27 ] @
Hvala svima na pomoci konacno sam natjerao skriptu da radi i u IE :)

Koristio sam ovaj kod koji je Raynor napisao posto mi se on nekako cini najjednostavniji (ako ne racunam includovanje jquery-a samo radi ove skripte :))


Sreca pa sam prije nekad naucio regexp pa se nisam morao muciti puno oko prepravljanja koda :)


Hvala svima jos jednom !