Avatar billede kilesi Nybegynder
23. juni 2010 - 11:14 Der er 11 kommentarer

FireFox vil ikke afvikle min DHTML-kode som virker perfekt i Safari og IE

Hej eksperter :-)

Jeg har begået en meget simpel - og i Safari og IE fuldt ud funktionel "webshop"-løsning :-) - vha. DHTML, som FireFox's fortolker af JavaScript imidlertid brokker sig over :-( - (uddybes nærmere senere).

Min løsning er bygget op således:

1. Et kommasepareret varekatalog loades ind i et array i en js-fil (produkter.js - ikke væsentlig for selve problemet).

2. I en anden js-fil (bestil.js) genererer jeg vha. DHTML x-antal tabeller (samles i een variabel, varerKode*), hvor hver række indeholder oplysninger om varenr. varebeskrivelse, pris samt et felt til at indtaste antal i.

* varerKode udskriver jeg direkte via document.write på følgende bestillingsside: http://www.shifis.dk/bestil-hudpleje-produkter-hos-shifis.html

Når en bruger dernæst form-submitter via en af knapperne 'Dan min ordre', så kaldes funktionen danOrdreLinier()(fra bestil.js). I Safari og IE (begge nyeste versioner) åbnes dernæst et nyt vindue, hvori jeg udskriver en ny variabel-kode for selve ordren, nemlig ordreKode. Når en bruger efterfølgende udfylder resten af denne nye DHTML-generedede side, så afsendes formen via et CGI script og alle er glade :-)

3. Problemet i FireFox (afsløres ved at bruge Fejlkonsol) består i, at JavaScript-koden brokker sig over at skulle arbejde med en udefineret form, som ER generet tidligere vha. DHTML?

Det er som om at FireFox læser/fortolker JavaScripten og min DHTML anderledes/mere kritisk end Safari og IE, men jeg kan rent faktisk ikke se hvordan jeg kan gøre FireFox tilfreds, uden at skulle den manuelle (og her hører det smarte så op ...) vej med at generere mit varekatalog direkte på en html-side?

Det bliver vildt spændende at se hvad jer eksperter kan komme på af gode råd og meget gerne en konkret (og smart) løsning :-)
Avatar billede keysersoze Guru
23. juni 2010 - 11:45 #1
En betydelig smartere løsning vil helt klart være at droppe javascript til det og i stedet skifte til en serverside-teknologi (fx PHP eller ASP.NET). At du opbygger store og vigtige dele af din side med javascript går i høj grad ud over indeksering i søgemaskiner, for de kan ikke tolke javascript.
Avatar billede kilesi Nybegynder
23. juni 2010 - 12:13 #2
Hej keysersoze,

1. Det har naturligvis været med i mine overvejelser at benytte andet end nuværende værktøjer, men mit spørgsmål er altså ment som efterlysning af en løsning på den NUVÆRENDE FireFox-problemstilling - med den anvendte teknologi (som er de jeg p.t. behersker rimeligt, til lidt mere end husbehov :-)!

2. Nu er selve indholdet i varekataloget jo ikke noget der skal findes via Google, og det er også det eneste sted på hele sitet - netop aht. SEO - anvender JavaScript i så vid udstrækning. Så nej, jeg synes ikke der indholdsmæssigt er opbygget "store og vigtige dele af sitet" med JavaScript. Det er blot for at give en bruger et simpelt lille værktøj, som virker perfekt i Safari og IE og som de rent faktisk benytter sig af :-)
Avatar billede dmdisco Nybegynder
23. juni 2010 - 13:28 #3
ka problemet være at du ikke har oprettet den nye form men istedet indsætter html'en?
prøv at ændre det til at du oprettet de ting du skal bruge i DOMen og se om det så virker.
Avatar billede kilesi Nybegynder
23. juni 2010 - 13:52 #4
Hej dmdisco,

Egentlig synes både Safari og IE (jo), at jeg HAR oprettet html'en, ganske vist som DHTML, og det virker som sagt i de to browsere.

Jeg føler mig ret overbevist om at FireFox vil virke, hvis jeg opretter varekataloget i "ren" html (er det sådan jeg skal forstå dig?), men så går det automatiske/smarte jo fløjten. Beklager hvis jeg evt. forstår dig forkert :-)?
Avatar billede dmdisco Nybegynder
23. juni 2010 - 14:08 #5
nej men det kan være at refferencerne ikke findes når formen er oprettet som indsat html og ikke med createelement
Avatar billede jokkejensen Novice
23. juni 2010 - 14:28 #6
prøv onsubmit="return danOrdreLinier()" og så ellers return false, og ikke return true.

/J
Avatar billede Slettet bruger
23. juni 2010 - 14:39 #7
Det virker også (tilsyneladende) perfekt i Chrome og Opera (på Linux) flot : )

- men ikke i Firefox'en : (
Der kommer dog ingen deciderede fejl i konsollen, så jeg mistænker at det skyldes at FF tror du er ved at poppe en popop op (uden at brugeren har klikket på et rigtigt link) - og afliver det nye vindue.

Forsøg:
"Dan min ordre" knappen submitter formen, som dog ingen action har !
- men "kun" en onsubmit="danOrdreLinier()"

Prøv om du får det til at spille ved at ændre formen til:
action="java script:danOrdreLinier()"

Hvis ikke dét nytter, kan du prøve at lave knappen om til et link med href="java script:danOrdreLinier()"

MEN MEN MEN
Hvorfor overhovedet poppe op i et nyt vindue ?
- jeg tror det kan give anledning til tvivl, og det er jo det værste der kan ske - netop i dét øjeblik!
Avatar billede jokkejensen Novice
23. juni 2010 - 14:40 #8
hhv:

form1 = document.getElementsByName["varekatalogForm1"][0];
form2 = ...
form3 = ...

i danOrdreLinier()
Avatar billede andreas13_fam Nybegynder
23. juni 2010 - 16:09 #9
Sådan som jeg ser det er problemet at varekatalogForm1 ikke eksistere i FireFox. Hvis jeg søger efter det i  JS koden finder jeg name="varekatalogForm1". Jeg går derved ud fra at det er den du søger.

Grunden til at det ikke virker i firefox, formoder jeg er fordi varekatalogForm1 ikke henviser til et "NAME" men en variabel sat med "var".

Løsningen må derfor være som jokkejensen beskriver at bruge document.getElementsByName skriver. Hvilket virker fint hvis man bruger parenteser :)

document.getElementsByName("varekatalogForm1")[0];

Jeg husker dog at getElementsByName ikke fungere optimalt i alle browser. Hvis det er tilfældet kan du bruge denne funktion:

window.findForm = function (name) {
    var forms = document.getElementsByTagName('form'),
      singelForm;
    for (var i=0;i<forms.length;i++) {
      if (forms[i].getAttribute('name') == name) {
          singelForm = forms[i];
      }
    }
    alert(singelForm);
}
window.findForm('varekatalogForm1');
Avatar billede kilesi Nybegynder
23. juni 2010 - 22:50 #10
Ok, så er jeg med, men får ikke tid at "lege" med det i aften. Vender naturligvis tilbage med opfølgende svar.
Avatar billede kilesi Nybegynder
25. juni 2010 - 19:13 #11
Hej jokkejensen,

Dit svar med document.getElementsByName("varekatalogForm1")[0]; virkede i første hug.

Super, og mange tak til alle der har villet hjælpe med gode forslag :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester