Avatar billede sesso Nybegynder
26. september 2007 - 07:47 Der er 5 kommentarer og
2 løsninger

"Du trykkede uden for boksen"

Hej,
jeg har en knap der, når man trykker, kalder en funktion der laver en boks med nogen tekst i. Det jeg så gerne vil have er, at når man trykker et hvilket som helst sted uden for boksen, skal boksen slettes igen. Men jeg ved ikke hvilken event jeg skal bruge der, og hvilket element, eventen skal være sammenhængen med. Jeg har før lavet en meget kringlet løsning, hvor alle andre element end boksen, havde en click event, der kaldte funktionen der lavede boksen. Men jeg tror bestemt, at der er en bedre løsning ... jeg kan bare ikke rigtig finde den:)
Avatar billede hells Nybegynder
26. september 2007 - 10:47 #1
<script type="text/javascript">
document.onclick = function(e){
  var boks;
  if(e.target.id=="knap"){
    //der er trykket på knappen
    //lav boksen, hvis den ikke allerede eksisterer:
    if(!document.getElementById("boks")){
      boks = document.createElement("div");
      boks.appendChild(document.createTextNode("tekst, tekst, tekst"));
      boks.setAttribute("id","boks");
      document.getElementsByTagName("body")[0].appendChild(boks);
    }
  } else if(e.target.id!="boks"){
    //der er trykket uden for knappen og udenfor boksen
    //så vi ikke får fejlmelding, hvis vi trykker på siden, når der ikke er en boks:
    boks = document.getElementById("boks");
    if(boks)
      document.getElementsByTagName("body")[0].removeChild(boks);
  }
}
</script>
Avatar billede sesso Nybegynder
26. september 2007 - 16:04 #2
Det var egentligt en utrolig simpel måde, som virker perfekt!
Jeg har dog aldrig støt på noget i denne stil (med hensyn til at bruge target.id sammen med onclick eventens return værdig), så er det muligt at få et par link til nogen referencer og information omkring dette, og hvilke ting, i samme stil, der også er muligt.
Avatar billede hells Nybegynder
26. september 2007 - 16:12 #3
Tja, inden for arten dokumentation:
http://developer.mozilla.org/en/docs/DOM:event.target
http://developer.mozilla.org/en/docs/DOM:event

Du får også lige et link til en side, som jeg nogle gange bruger som inspiration/hjælp:
http://www.quirksmode.org/resources.html
Avatar billede hells Nybegynder
26. september 2007 - 16:58 #4
Det lader så til, at det skal rettes lidt til for at det virker i IE.
Avatar billede hells Nybegynder
26. september 2007 - 17:20 #5
Og det skulle gerne være klaret med det her. Testet i IE 7 og nyeste versioner af firefox og opera:
document.onclick = function(e){
  var boks;
  if(e){
    //ikke IE:
    if(e.target.id=="knap"&&!document.getElementById("boks")){
      //der er trykket på knappen og
      //boksen er ikke allerede lavet:
      boks = document.createElement("div");
      boks.appendChild(document.createTextNode("tekst, tekst, tekst"));
      boks.setAttribute("id","boks");
      document.getElementsByTagName("body")[0].appendChild(boks);
    } else if(e.target.id!="boks"&&document.getElementById("boks")){
      //der er trykket uden for knappen og udenfor boksen og
      //boksen eksisterer:
      boks = document.getElementById("boks");
      document.getElementsByTagName("body")[0].removeChild(boks);
    }
  } else if(event.srcElement) {
    //IE:
    if(event.srcElement.id=="knap"&&!document.getElementById("boks")){
      //der er trykket på knappen og
      //boksen er ikke allerede lavet:
      boks = document.createElement("div");
      boks.appendChild(document.createTextNode("tekst, tekst, tekst"));
      boks.setAttribute("id","boks");
      document.getElementsByTagName("body")[0].appendChild(boks);
    } else if(event.srcElement.id!="boks"&&document.getElementById("boks")){
      //der er trykket uden for knappen og udenfor boksen og
      //boksen eksisterer:
      boks = document.getElementById("boks");
      document.getElementsByTagName("body")[0].removeChild(boks);
    }
  }
}
Avatar billede olebole Juniormester
26. september 2007 - 23:59 #6
<ole>

Husk:
    boks = null;

- efter fjernelsen. Ellers akkumuleres elementerne i hukommelsen  ;o)

Men hvorfor ikke bare vise eller skjule boksen, når den én gang er lavet? Teksten sættes så med:
    boks.firstChild.nodeValue = "Ny tekst";

/mvh
</bole>
Avatar billede Slettet bruger
06. oktober 2007 - 01:11 #7
fordi han er en spade :P nej pjatter bare
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