Avatar billede nyp Nybegynder
07. august 2003 - 10:24 Der er 9 kommentarer og
1 løsning

Object der ikke virker

Hej
Er der nogen der kan forklare hvorfor det nederste script ikke virker, i microsoft reference står der:

Inline HTML <ELEMENT onmousedown = "handler" ... >  All platforms

Event property: object.onmousedown = handler,  JScript only

------------------------------------------------
Dette her virker efter hensigten der kommer en alert.
------------------------------------------------
<html><head><title>test objekt</title>
<script language="JavaScript1.2" src="lib.js"></script>
<script>
function libinit(){
    page=new lib_doc_size();
    test=new lib_obj('testobj');
//    test.onmousedown = alert(event.srcElement.tagName);
}

onload=libinit;
</script>
</head>
<style>
#testobj{position:absolute; left:100; top:100; width:300; height:300; clip:rect(0,300,300,0); background-color:lightgreen; layer-background-color:red}
</style>
<body>
<div id="testobj" onmousedown="alert(event.srcElement.tagName);"></div>
</body>
</html>
---------------------------------------------------
dette her virker ikke, der kommer enfejlmedelelse "Object required"
---------------------------------------------------
<html><head><title>test objekt</title>
<script language="JavaScript1.2" src="lib.js"></script>
<script>
function libinit(){
    page=new lib_doc_size();
    test=new lib_obj('testobj');
    test.onmousedown = alert(event.srcElement.tagName);
}

onload=libinit;
</script>
</head>
<style>
#testobj{position:absolute; left:100; top:100; width:300; height:300; clip:rect(0,300,300,0); background-color:lightgreen; layer-background-color:red}
</style>
<body>
<div id="testobj"></div>
</body>
</html>
----------------------------------------------------
Avatar billede erikjacobsen Ekspert
07. august 2003 - 10:34 #1
Utestet:

test.onmousedown = function (event) {
    alert(event.srcElement.tagName);
};
Avatar billede nyp Nybegynder
07. august 2003 - 10:44 #2
Desvære virker ikke, der kommer dog ikke nogen fejlmedelelser, men der kommer heller ikke nogen alert når der klikkes på feltet.
Avatar billede erikjacobsen Ekspert
07. august 2003 - 10:50 #3
Nå ja:

test.onmousedown = function (evt) {
    alert(event.srcElement.tagName);
};
Avatar billede nyp Nybegynder
07. august 2003 - 10:55 #4
det gør ingen forskel :-(
Avatar billede erikjacobsen Ekspert
07. august 2003 - 11:03 #5
Det "test" skal jo være et korrekt DOM-element. Hvis du skriver

  test=document.getElementById('testobj');

bør det virke. Jeg kender ikke det objekt du selv opretter
Avatar billede nyp Nybegynder
07. august 2003 - 11:14 #6
lib.js ser sådan ud og fungerer normalt rigtig godt.

/**************************************************************************** 
DHTML library from DHTMLCentral.com
*  Copyright (C) 2001 Thomas Brattli 2001
*  This script was released at DHTMLCentral.com
*  Visit for more great scripts!
*  This may be used and changed freely as long as this msg is intact!
*  We will also appreciate any links you could give us.
*
*  Made by Thomas Brattli 2001
***************************************************************************/

//Browsercheck (needed) ***************
function lib_bwcheck()
{
  this.ver=navigator.appVersion
  this.agent=navigator.userAgent
  this.dom=document.getElementById?1:0
  this.opera5=this.agent.indexOf("Opera 5")>-1
  this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom && !this.opera5)?1:0;
  this.ie6=(this.ver.indexOf("MSIE 6")>-1 && this.dom && !this.opera5)?1:0;
  this.ie4=(document.all && !this.dom && !this.opera5)?1:0;
  this.ie=this.ie4||this.ie5||this.ie6
  this.mac=this.agent.indexOf("Mac")>-1
  this.ns6=(this.dom && parseInt(this.ver) >= 5) ?1:0;
  this.ns4=(document.layers && !this.dom)?1:0;
  this.bw=(this.ie6||this.ie5||this.ie4||this.ns4||this.ns6||this.opera5)
  return this
}

bw=new lib_bwcheck() //Browsercheck object

//Debug function ******************

function lib_message(txt){alert(txt); return false}

//Lib objects  ********************

function lib_obj(obj,nest)
{
  if(!bw.bw) return lib_message('Old browser')
  nest=(!nest) ? "":'document.'+nest+'.'
  this.evnt=bw.dom? document.getElementById(obj):
    bw.ie4?document.all[obj]:bw.ns4?eval(nest+"document.layers." +obj):0;   
  if(!this.evnt) return lib_message('The layer does not exist ('+obj+')'
    +'- \nIf your using Netscape please check the nesting of your tags!')
  this.css=bw.dom||bw.ie4?this.evnt.style:this.evnt;
  this.ref=bw.dom||bw.ie4?document:this.css.document;
  this.x=parseInt(this.css.left)||this.css.pixelLeft||this.evnt.offsetLeft||0;
  this.y=parseInt(this.css.top)||this.css.pixelTop||this.evnt.offsetTop||0
  this.w=this.evnt.offsetWidth||this.css.clip.width||
    this.ref.width||this.css.pixelWidth||0;
  this.h=this.evnt.offsetHeight||this.css.clip.height||
    this.ref.height||this.css.pixelHeight||0
  this.c=0 //Clip values
  if((bw.dom || bw.ie4) && this.css.clip)
  {
      this.c=this.css.clip; this.c=this.c.slice(5,this.c.length-1);
      this.c=this.c.split(' ');
      for(var i=0;i<4;i++){this.c[i]=parseInt(this.c[i])}
  }
  this.ct=this.css.clip.top||this.c[0]||0;
  this.cr=this.css.clip.right||this.c[1]||this.w||0
  this.cb=this.css.clip.bottom||this.c[2]||this.h||0;
  this.cl=this.css.clip.left||this.c[3]||0
  this.obj = obj + "Object"; eval(this.obj + "=this")
  return this
}

//Moving object to **************
lib_obj.prototype.moveIt = function(x,y)
{
  this.x=x;this.y=y; this.css.left=x;this.css.top=y
}

//Moving object by ***************
lib_obj.prototype.moveBy = function(x,y)
{
  this.css.left=this.x+=x; this.css.top=this.y+=y
}

//Showing object ************
lib_obj.prototype.showIt = function()
{
  this.css.visibility="visible"
}

//Hiding object **********
lib_obj.prototype.hideIt = function(){this.css.visibility="hidden"}

//Changing backgroundcolor ***************
lib_obj.prototype.bg = function(color){
    if(bw.opera) this.css.background=color
    else if(bw.dom || bw.ie4) this.css.backgroundColor=color
    else if(bw.ns4) this.css.bgColor=color 
}

//Writing content to object ***
lib_obj.prototype.writeIt = function(text,startHTML,endHTML){
    if(bw.ns4){
    if(!startHTML){startHTML=""; endHTML=""}
      this.ref.open("text/html");
    this.ref.write(startHTML+text+endHTML);
    this.ref.close()
    }else this.evnt.innerHTML=text
}

//Clipping object to ******
lib_obj.prototype.clipTo = function(t,r,b,l,setwidth){
  this.ct=t; this.cr=r; this.cb=b; this.cl=l
  if(bw.ns4){
    this.css.clip.top=t;this.css.clip.right=r
    this.css.clip.bottom=b;this.css.clip.left=l
  }else{
    if(t<0)t=0;if(r<0)r=0;if(b<0)b=0;if(b<0)b=0
    this.css.clip="rect("+t+","+r+","+b+","+l+")";
    if(setwidth){this.css.pixelWidth=this.css.width=r;
    this.css.pixelHeight=this.css.height=b}
  }
}

//Clipping object by ******
lib_obj.prototype.clipBy = function(t,r,b,l,setwidth){
  this.clipTo(this.ct+t,this.cr+r,this.cb+b,this.cl+l,setwidth)
}

//Clip animation ************
lib_obj.prototype.clipIt = function(t,r,b,l,step,fn,wh){
  tstep=Math.max(Math.max(Math.abs((t-this.ct)/step),Math.abs((r-this.cr)/step)),
    Math.max(Math.abs((b-this.cb)/step),Math.abs((l-this.cl)/step)))
  if(!this.clipactive){
    this.clipactive=true; if(!wh) wh=0; if(!fn) fn=0
    this.clip(t,r,b,l,(t-this.ct)/tstep,(r-this.cr)/tstep,
      (b-this.cb)/tstep,(l-this.cl)/tstep,tstep,0, fn,wh)
  }
}
lib_obj.prototype.clip = function(t,r,b,l,ts,rs,bs,ls,tstep,astep,fn,wh){
  if(astep<tstep){
    if(wh) eval(wh);
    astep++
    this.clipBy(ts,rs,bs,ls,1);
    setTimeout(this.obj+".clip("+t+","+r+","+b+","+l+","+ts+","+rs+","
      +bs+","+ls+","+tstep+","+astep+",'"+fn+"','"+wh+"')",50)
  }else{
    this.clipactive=false; this.clipTo(t,r,b,l,1);
    if(fn) eval(fn)
  }
}

//Slide animation ***********
lib_obj.prototype.slideIt = function(endx,endy,inc,speed,fn,wh){
  if(!this.slideactive){
    var distx = endx - this.x;
    var disty = endy - this.y
    var num = Math.sqrt(Math.pow(distx,2)+Math.pow(disty,2))/inc
    var dx = distx/num; var dy = disty/num
    this.slideactive = 1;
    if(!wh) wh=0; if(!fn) fn=0
    this.slide(dx,dy,endx,endy,speed,fn,wh)
    }
}
lib_obj.prototype.slide = function(dx,dy,endx,endy,speed,fn,wh) {
  if(this.slideactive&&
  (Math.floor(Math.abs(dx))<Math.floor(Math.abs(endx-this.x))||
    Math.floor(Math.abs(dy))<Math.floor(Math.abs(endy-this.y)))){
    this.moveBy(dx,dy);
    if(wh) eval(wh)
    setTimeout(this.obj+".slide("+dx+","+dy+","+endx+","+endy+","+speed+",'"
    +fn+"','"+wh+"')",speed)
  }else{
    this.slideactive = 0;
    this.moveIt(endx,endy);
    if(fn) eval(fn)
  }
}

//Circle animation ****************
lib_obj.prototype.circleIt = function(rad,ainc,a,enda,xc,yc,speed,fn) {
  if((Math.abs(ainc)<Math.abs(enda-a))) {
    a += ainc
    var x = xc + rad*Math.cos(a*Math.PI/180)
    var y = yc - rad*Math.sin(a*Math.PI/180)
    this.moveIt(x,y)
    setTimeout(this.obj+".circleIt("+rad+","+ainc+","+a+","+enda+","
      +xc+","+yc+","+speed+",'"+fn+"')",speed)
  }else if(fn&&fn!="undefined") eval(fn)
}

//Document size object ********
function lib_doc_size(){
  this.x=0;this.x2=bw.ie && document.body.offsetWidth-20||innerWidth||0;
  this.y=0;this.y2=bw.ie && document.body.offsetHeight-5||innerHeight||0;
  if(!this.x2||!this.y2) return message('Document has no width or height')
  this.x50=this.x2/2;this.y50=this.y2/2;
  return this;
}

//Drag drop functions start *******************
dd_is_active=0; dd_obj=0; dd_mobj=0
function lib_dd(){
  dd_is_active=1
  if(bw.ns4){
    document.captureEvents(Event.MOUSEMOVE|Event.MOUSEDOWN|Event.MOUSEUP)
  }
  document.onmousemove=lib_dd_move;
  document.onmousedown=lib_dd_down
  document.onmouseup=lib_dd_up
}
lib_obj.prototype.dragdrop = function(obj){
  if(!dd_is_active) lib_dd()
  this.evnt.onmouseover=new Function("lib_dd_over("+this.obj+")")
  this.evnt.onmouseout=new Function("dd_mobj=0")
  if(obj) this.ddobj=obj
}
lib_obj.prototype.nodragdrop = function(){
  this.evnt.onmouseover=""; this.evnt.onmouseout=""
  dd_obj=0; dd_mobj=0
}
//Drag drop event functions
function lib_dd_over(obj){dd_mobj=obj}
function lib_dd_up(e){dd_obj=0}
function lib_dd_down(e){ //Mousedown
  if(dd_mobj){
    x=(bw.ns4 || bw.ns6)?e.pageX:event.x||event.clientX
    y=(bw.ns4 || bw.ns6)?e.pageY:event.y||event.clientY
    dd_obj=dd_mobj
    dd_obj.clX=x-dd_obj.x;
    dd_obj.clY=y-dd_obj.y
  }
}
function lib_dd_move(e,y,rresize){ //Mousemove
  x=(bw.ns4 || bw.ns6)?e.pageX:event.x||event.clientX
  y=(bw.ns4 || bw.ns6)?e.pageY:event.y||event.clientY
  if(dd_obj){
    nx=x-dd_obj.clX; ny=y-dd_obj.clY
    if(dd_obj.ddobj) dd_obj.ddobj.moveIt(nx,ny)
    else dd_obj.moveIt(nx,ny)
  }
  if(!bw.ns4) return false     
}
//Drag drop functions end *************
Avatar billede nyp Nybegynder
07. august 2003 - 11:21 #7
Men dit forslag virkede, så selvom jeg ikke helt forstår hvorfor mit ikke virkede, vil du så smide et svar.
Avatar billede erikjacobsen Ekspert
07. august 2003 - 11:29 #8
Prøv så lige:

test=new lib_obj('testobj');
test.evnt.onmousedown = function (evt) {
  alert(event.srcElement.tagName);
};
Avatar billede nyp Nybegynder
07. august 2003 - 11:32 #9
Fantastisk! jeg takker og bukker, så hvis du sender et svar...
Avatar billede erikjacobsen Ekspert
07. august 2003 - 11:34 #10
Jeg håber du kan se hvorfor. Der er en linie i din .js fil, hvor man finder
DOM-elementet:

this.evnt=bw.dom? document.getElementById(obj):
    bw.ie4?document.all[obj]:bw.ns4?eval(nest+"document.layers." +obj):0;
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