Avatar billede kometen79 Nybegynder
08. januar 2009 - 19:42 Der er 5 kommentarer og
1 løsning

Javascript fejl ved validering

Hej Eksperter,

Hvordan får jeg denne fejl væk, som jeg får i fejlkonsol?

Advarsel: Fejl i tolkning af værdi for 'opacity'.  Erklæring droppet.

Den refererer til denne kode:

<script lanuage="JavaScript">

function checkDom()
{
    this.name=navigator.appName.toLowerCase()
    this.ver=navigator.appVersion.toLowerCase()
    this.opera=(this.name=="opera")?1:0
    this.dom=(document.getElementById&&!this.opera)?1:0
    this.ie=(document.all)?1:0
    this.ie6=(this.dom&&this.ie&&this.ver.indexOf('msie 6'))?1:0
    this.ie5=(this.dom&&this.ie&&!this.ie6)?1:0
    this.ns4=(document.layers)?1:0
    this.ns6=(this.dom&&!this.ie)?1:0
    this.ns=(this.ns4||this.ns6)?1:0
    this.bw=(this.dom||this.ie||this.ns||this.opera)?1:0
}
bw = new checkDom()

// make dom object
function makeDom(name)
{
    if(!document.getElementById) return null
    this.name = name
    this.evnt = document.getElementById(name)
    this.css = this.evnt.style
    this.x = this.css.pixelLeft || this.evnt.offsetLeft
    this.y = this.css.pixelTop || this.evnt.offsetTop
    this.w = this.css.pixelWidth || this.evnt.offsetWidth
    this.h = this.css.pixelHeight || this.evnt.offsetHeight
    this.id = name
    this.obj = name + 'Object'; eval(this.obj + '=this')

    makeDom.prototype.moveTo = function(x,y)
    {
        x = parseInt(x); y = parseInt(y)
        this.css.left = x+'px'
        this.css.top = y+'px'
        this.x = x
        this.y = y
    }
    makeDom.prototype.writ = function(txt,where)
    {
        this.evnt.innerHTML = where ? where>0 ? this.evnt.innerHTML + txt : txt + this.evnt.innerHTML : txt
    }
}

function fadeTicker()
{
    this.running = 0
    this.speed = 0
    this.delay = 0
    this.box = 0
    this.scrl = 0
    this.onItem = 0
    this.to = 0
    this.alph = 100
    this.items = new Array()
    eval(this.obj + '=this')
}
fadeTicker.prototype.addItem = function(itm)
{
    this.items[this.items.length] = itm
}
fadeTicker.prototype.init = function(spd,dly)
{
    this.speed = parseInt(spd)
    this.delay = parseInt(dly*1000)
    this.box = new makeDom('tickBox')
    this.scrl = new makeDom('tickCont')
    this.draw()
}
fadeTicker.prototype.draw = function()
{
    this.onItem = (this.onItem<this.items.length) ? this.onItem : 0
    this.scrl.moveTo(this.scrl.x,this.box.h)
    this.scrl.writ(this.items[this.onItem])
    this.onItem++
    this.run()
}
fadeTicker.prototype.run = function()
{
    if(this.scrl.y>1)
    {
        this.scrl.moveTo(this.scrl.x,this.scrl.y-this.speed)
        this.to = setTimeout(this.obj+'.run()',25)
    }
    else this.to = setTimeout(this.obj+'.fade()',this.delay)
}
fadeTicker.prototype.play = function()
{
    clearTimeout(this.to)
    this.to = setTimeout(this.obj+'.run()',1)
}
fadeTicker.prototype.pause = function()
{
    clearTimeout(this.to)
}
fadeTicker.prototype.fade = function()
{
    this.setOpac(this.alph)
    this.alph -= 10
    if(this.alph) setTimeout(this.obj+'.fade()',25)
    else
    {
        this.alph = 100
        this.setOpac(this.alph)
        this.draw()
    }
}
fadeTicker.prototype.setOpac = function(op)
{
    if(bw.ns6) this.scrl.css.MozOpacity = op+'%'
    else this.scrl.evnt.filters['alpha']['opacity'] = op
}   
    </script>
Avatar billede olebole Juniormester
09. januar 2009 - 10:42 #1
<ole>

Nej, du får ikke en fejl. en advarsel er ikke en fejl  ;o)

Til gengæld har innerHTML aldrig nogensinde været valid i nogen standard. Og det er mange år siden, language attributte på et script-tag blev deprecated:
    <script lanuage="JavaScript">

- skal være:
    <script type="text/JavaScript">

/mvh
</bole>
Avatar billede kometen79 Nybegynder
09. januar 2009 - 10:55 #2
Super, tak for det :) Kan jeg gøre noget således at advarslen forsvinder?
Avatar billede montago Praktikant
09. januar 2009 - 14:31 #3
Opacity er desværre ikke en standard på tværs af browsere
hvilket man fint håndtere i koden...


dét som kan være fejlen er hvis opacity er under 0.0 / 0 eller får en værdi som ikke er understyttet af browseren - har du prøvet at debugge/alert din opacity ?


evt kan du i funktionen
fadeTicker.prototype.setOpac = function(op)
{
    if(bw.ns6) this.scrl.css.MozOpacity = op+'%'
    else this.scrl.evnt.filters['alpha']['opacity'] = op
}

smække try-catch rundt om - så skjules advarslen:

fadeTicker.prototype.setOpac = function(op)
{
  try{
    if(bw.ns6) this.scrl.css.MozOpacity = op+'%'
    else this.scrl.evnt.filters['alpha']['opacity'] = op
  }catch(E){}
}
Avatar billede olebole Juniormester
11. januar 2009 - 15:25 #4
- og så er det som regel en bedre idé at bruge en funktionstest:

fadeTicker.prototype.setOpac = function(op) {
    if (typeof this.scrl.css.opacity!="undefined") {
        this.scrl.css.opacity = op/100;
    }
    else if (typeof this.scrl.css.MozOpacity!="undefined") {
        this.scrl.css.MozOpacity = op/100;
    }
    else if (typeof this.filters!="undefined") {
        this.scrl.filters.alpha.opacity = op;
    }
}

- og sålænge der kun er tale om en advarsel, er der ingen grund til at skjule den. Specielt ikke, hvis man er nødt til at bruge try/catch, som man generelt bør reservere situationer, hvor den er absolut nødvendig.

Med denne fremgangsmåde fremtidssikrer du tilmed din kode, da den tager højde for, at browserne med tiden vil understøtte CSS-standarden.

MozOpacity skal forøvrigt ikke have enhed på - så ingen '%' dér. Til gengæld skal værdien kun være 1/100 af den værdi IE skal bruge
Avatar billede kometen79 Nybegynder
05. januar 2010 - 14:43 #5
Lukker
Avatar billede montago Praktikant
05. januar 2010 - 15:06 #6
fedt nok bare selv at tage point...
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