Avatar billede sjh Nybegynder
15. december 2004 - 04:32 Der er 28 kommentarer og
1 løsning

flere document dot onclick osv. og class i js.

hvad gør man når man har lavet en funktion som bruger alle dem her:

document.onclick    = event_Click;
document.onmouseup  = event_Mouseup;
osv..

og man skal bruge de samme funktioner til et andet script.

Altså hvis jeg laver en script som bruger fx. document.onclick
og en anden bruger et andet script som også bruger document.onclick og de ikke står under samme funktion så virker den ene ikke :(


Det med class.. kan man ikke lave en slaks class funktion hvor man kan lave noget script i.. så man fx. kan skrive minClass.funktion(bla,bla) ??
Avatar billede skovenborg Nybegynder
15. december 2004 - 11:29 #1
Du kunne evt. lave en funktion, som kaldes med document.onclick-eventen, og denne funktion aktiverer så de to andre scripts:
function foo() {
    alert("FOO");
  }
  function bar() {
    alert("BAR"); 
  }
 
  document.onclick = function() {
    foo();
    bar();
  }
Avatar billede sjh Nybegynder
15. december 2004 - 11:32 #2
ja det kunne man.. men det var ikke lige det jeg var ude efter.. det er bare for at man ikke skal ind i et STORT script og rode.. :D
Avatar billede skovenborg Nybegynder
15. december 2004 - 11:34 #3
Det med klasser ved jeg ikke helt hvad du mener med, men prøv at se følgende eksempel:
function Klasse() {
    this.tal;
    this.method1 = foo;
  }
  Klasse.prototype.method2 = function(num) {
      this.tal = num;
      alert(this.tal);
  }
  var k = new Klasse();
  k.method1();
  k.method2(10);
 
  function foo() {
    alert("FOO");
  }
Avatar billede skovenborg Nybegynder
15. december 2004 - 11:38 #4
hmm, hvorfor skal du rode så meget, når du bare skal skrive de to funktioner, som skal kaldes. Dette er umiddelbart den mest overskuelige metode jeg kender, ellers skal du have fat i to forskellige events, fx:
document.onclick = foo;
  document.onmouseup = bar;
Avatar billede sjh Nybegynder
15. december 2004 - 11:44 #5
ja det ved jeg godt.. men du ved godt når andre (nørder) skal prøve det og de selv har nogle script på deres side(r) så skal det jo lige passe at de har en script som også bruger document.onclick osv.. og så funker de jo ikke.. ;)
Avatar billede sjh Nybegynder
15. december 2004 - 11:58 #6
det jeg mener med class..

function minClass() {
  function minFunktion1(value) {
    alert(value);
  }
  function minFunktion2(value) {
    alert(value);
  }
  function minFunktion3(value) {
    alert(value);
  }
  function minFunktion4(value) {
    alert(value);
  }
}
minClass.minFunktion1('test');

så man IKKE bare kan skrive:
minFunktion1('test');
Avatar billede skovenborg Nybegynder
15. december 2004 - 12:01 #7
det er fordi dine funktioner ikke er en del af klassen endnu (lige nu er de en lokal funktion i funtionen minClass. Men hvis du kigger på mit foregående eksempel kan du se hvordan man kan lave dem som en del af klassen hvormed du kan skrive som du gør nu.
Avatar billede sjh Nybegynder
15. december 2004 - 12:22 #8
det er jeg sq for dum til..

function minClass() {
  function minFunktion1(value) {
    alert(value);
  }
}
var k = new minClass();
k.minFunktion1('test');
Avatar billede skovenborg Nybegynder
15. december 2004 - 12:27 #9
Det fordi du skal flytte funktionen ud fra din klasse-funktion, og derefter "tilmelde" den til din klasse med_
this.minFunktion1 = minFunktion1;

function minClass() {
  this.minFunktion1 = minFunktion1
}
function minFunktion1(value) {
    alert(value);
  }
var k = new minClass();
k.minFunktion1('test');
Avatar billede sjh Nybegynder
15. december 2004 - 12:31 #10
tja.. så kan jeg ikke se nogle fordel i det.. jeg kan stadivæk god komme til den ved at skrive:

minFunktion1('test');
Avatar billede skovenborg Nybegynder
15. december 2004 - 12:33 #11
så brug prototype-metoden istedet:
function minClass() {
}
minClass.prototype.minFunktion1 = function(value) {
    alert(value);
  }
var k = new minClass();
k.minFunktion1('test');
Avatar billede sjh Nybegynder
15. december 2004 - 14:40 #12
okææ jeg prøve... smider du lige et svar :-)
Avatar billede skovenborg Nybegynder
15. december 2004 - 14:45 #13
jo, men vi blev dog ikke færdige med det første. Desværre kan jeg ikke helt se nogen løsning ud af det - men det kommer også an på hvad du skal bruge det til.
Det lyder lidt som om du laver et script som bruger document.onclick, og det er så et script andre kan downloade og bruge som de lyster. Men hvis det er tilfældet er problemmet trods alt ikke dit, men dem der bruger dit script. Man kan (og behøves) ikke at tage hensyn til den slags ting, for det er brugeren (eller udvikleren) som bruger dit script, som skal sørge for det virker på hans/hendes side. Der er altså absolut intet i vejen med måden du laver dit script på nu (men du kan jo evt. skrive et forslag til hvordan brugeren undgår problemmet).
Avatar billede sjh Nybegynder
15. december 2004 - 14:57 #14
det er fordi jeg er ved og lave et CMS (Content Management System) som gerne skulle kunne det hele selv.. og hvis en bruger så bruger samme funktioner så duer det jo ikke.. jeg har også prøvet med den her:

    <script LANGUAGE="JavaScript" FOR="id_navn" EVENT="onClick">

    </script>

men den virker ikke så godt med onMouseMove.. når jeg skal flytte et DIV med musen. :(
Avatar billede skovenborg Nybegynder
15. december 2004 - 15:18 #15
det er ikke muligt at undgå brugen af document.<event>-metoden, og holde sig til de normalle elementer. Det bliver selvfølgelig mere bøvet, men kan være en udvej - ellers må du jo begrænse brugen af javascript på siden.
Avatar billede sjh Nybegynder
15. december 2004 - 15:41 #16
desværre er jeg nød til at bruge onmousemove.. ellers ender det med at brugeren ikke kan se hvad han laver da hele systemet er bygget op i vinduer (div)
Avatar billede sjh Nybegynder
15. december 2004 - 15:43 #17
jeg har også prøvet med <div onmousemove="move()"... men den er ikke hurtig nok
Avatar billede skovenborg Nybegynder
15. december 2004 - 22:38 #18
men bruger du ikke kun dine cms-scripts når brugeren vil redigere på sin side? I så fald kunne du jo disables brugerens javascript når der redigeres og så lade det køre ellers.

Hvordan mener du at det ovenstående er for langsomt? Kører computeren/scriptet langsommere eller er det fordi scriptet virker mærkeligere/dårligere på den måde.
Avatar billede sjh Nybegynder
16. december 2004 - 01:09 #19
Det er fordi.. hvis en bruger er logget ind kan han/hun trykke F7 så åbner den hele siden uden at loade en editor.. der kommer bare et DIV vindue frem med alle de funktioner der nu skal bruges..


Når man flytter vinduet (DIV) så taber den vinduet hvis man flytter musen hurtig..

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <title>Drag</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <script type="text/javascript">
    <!--
      var objDrag = null;
      var x ,y ,t ,l;
   
      function event_mousedown() {
        var objElem = window.event.srcElement;
        var strClass = objElem.className.toLowerCase();
        if (strClass == "cmsdrag") {
          objDrag = objElem;
          l = objDrag.style.pixelLeft;
          t = objDrag.style.pixelTop;
          x = window.event.clientX;
          y = window.event.clientY;
          // document.onmousemove = event_mousemove;
        }
      }
   
      function event_mousemove() {
        if (objDrag) {
          if (window.event.button == 1) {
            objDrag.style.pixelLeft = (l + (window.event.clientX -x));
            objDrag.style.pixelTop = (t + (window.event.clientY -y));
            //return false;
          }
        }
      }
   
      function event_mouseup() {
        objDrag = null;
      }
    /*
      if (document.all) {
        document.onmouseup  = event_mouseup;
        document.onmousedown = event_mousedown;
      }
    */
    //-->
    </script>
    <style type="text/css">
      .cmsDrag {
        position: absolute;
        font-family: Tahoma;
        font-size: 9pt;
        font-weight: bold;
        color: white;
        padding: 0px;
        border-color: white;
        border-width: 2px;
        border-style: outset;
        cursor: default;
        background-color: DarkBlue;
      }
    </style>
  </head>
  <body>
    Tekst Tekst Tekst Tekst Tekst Tekst Tekst Tekst Tekst Tekst Tekst Tekst Tekst Tekst Tekst
    Tekst Tekst Tekst Tekst Tekst Tekst Tekst Tekst Tekst Tekst Tekst Tekst Tekst Tekst Tekst
    Tekst Tekst Tekst Tekst Tekst Tekst Tekst Tekst Tekst Tekst Tekst Tekst Tekst Tekst Tekst
    Tekst Tekst Tekst Tekst Tekst Tekst Tekst Tekst Tekst Tekst Tekst Tekst Tekst Tekst Tekst
    <div class="cmsDrag" id="cmsDrag" style="top:205px;left:205px;" unselectable="on"
    onmousedown="event_mousedown()" onmousemove="event_mousemove()" onmouseup="event_mouseup()">Tekst
      <table style="color: Black;" border="0" width="300" cellpadding="0" cellspacing="0" bgcolor="ButtonFace">
        <tr>
          <td>Tekst</td>
          <td>Tekst</td>
        </tr>
        <tr>
          <td>Tekst</td>
          <td>Tekst</td>
        </tr>
      </table>
    </div>
  </body>
</html>
Avatar billede skovenborg Nybegynder
16. december 2004 - 01:26 #20
ja, det problem kender jeg godt...

Men jeg stødte lige på en lille fin methode jeg tror kan løse dit problem:
<script type="text/javascript">
  function foo() {alert("FOo");}
  function bar() {alert("Bar");}
  function baz() {alert("Baz");}

  document.onclick = foo;
  document.attachEvent("onclick",bar);
  document.attachEvent("onclick",baz);
</script>

Du skal forestille dig, at du er funktionen baz og de to andre er lavet af brugeren. Læg mærke til at de alle tre bliver kørt.
Avatar billede skovenborg Nybegynder
16. december 2004 - 01:29 #21
så tilføj dette her til dit script:
document.attachEvent("onmousemove",event_mousemove);

og evt. test om den virker:
if (document.attachEvent) {
document.attachEvent("onmousemove",event_mousemove);
}
Avatar billede sjh Nybegynder
16. december 2004 - 01:30 #22
okææ det ser jo meget beder ud.. nu skal der leges.. :D
Avatar billede sjh Nybegynder
16. december 2004 - 01:34 #23
hold da op hvor det virker.. det var sq lige det jeg skulle bruge.. takker mange gange for din hjælp :-)
Avatar billede skovenborg Nybegynder
16. december 2004 - 01:35 #24
det var så lidt - jeg troede egentlig heller ikke først på det kunne løses på en ordentlig måde, men det kunne åbenbart betale sig at søge lidt i diverse referencer :-)
Avatar billede sjh Nybegynder
16. december 2004 - 01:38 #25
ja så har vi da lært noget i dag også :D
Avatar billede sjh Nybegynder
16. december 2004 - 01:50 #26
Du ved vel ikke lige om det her virker i IE5 eller større.. .Enabled er ikke en attribute??

  objImg[i].Enabled = "true";

  var objImg = document.getElementsByTagName("IMG");
  for (i = 0; i < objImg.length; i++) {
    if (objImg[i].className == classButton) {
      objImg[i].unselectable = "on";
      objImg[i].Enabled = "true";
    }
  }
Avatar billede skovenborg Nybegynder
16. december 2004 - 10:34 #27
rent officielt så er ingen af de to (unselectable og enabled) ikke en del af et img-objekt. Men i IE's DHTML reference nævner de unselectable, men ikke i hvilken version det virker fra, så du bliver nok nød til at selve teste det af.

Enabled mindes jeg at have hørt om herinde på et tidspunkt, men det var vist en IE6-only mulighed, og ikke en man skulle regne med at ville virke i andre versioner. Det skal dog siges jeg ikke kan helt præcis huske det, og sådan nogle ting er bedst selv at teste af, for at se om det virker.

Hvis du er interesseret kan du downloade alle mulige browsere (også IE) herinde:
http://browsers.evolt.org/
og for at installere IE i tidligere versioner (uden at slette de forrige) så kig på:
http://www.webmasterworld.com/forum21/6561.htm
Avatar billede sjh Nybegynder
16. december 2004 - 11:58 #28
det med at have flere IE versioner.. kunne jeg godt tenke mig at se.. men man skal sq ha login :(
Avatar billede skovenborg Nybegynder
16. december 2004 - 12:02 #29
ja minsandten om den ikke pludselig kræver det. Nu er jeg heller ikke selv medlem, men måden jeg kom ind på siden var at søge på google efter
install ie5 ie6
og så kom den frem lidt nede på siden.
Prøv evt. dette link:
http://www.google.com/search?hl=da&q=having+IE5%2C+IE5.5+and+IE6+installed+simultaneously&btnG=S%C3%B8g&lr=
Det er det øverste jeg talte om...
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