Avatar billede donkazz Nybegynder
12. april 2007 - 11:23 Der er 20 kommentarer og
1 løsning

Deaktivere links?

Hejsa!

Jeg har en <div> med position:absolute som jeg skal bruge til at trække rundt på skærmen med drag'n'drop. Inde i den div har jeg en include som henter nogle links, men i form af at der er links i div'en lige pludseligt, så bliver jeg jo smidt væk fra siden hver gang jeg prøver at drag'n'droppe.. :-O

Så mit spørgsmål er om der er en måde hvorpå man kan deaktivere "indholdet" / links / osv. i en div?
Avatar billede roenving Novice
12. april 2007 - 14:34 #1
Du kan kun disable de links ved at sætte ekstra kode på, mens du dragger ...

-- er det simple links, dvs. at de kun benytter sig af href til at linke, for så kan du ved dragstart sætte en return false ind i onclick på dem alle, og ved dragslut sætte onclick til null !-)

-- hvis onclick bruges i forvejen vil det ikke være helt så ligefremt, aber dann haben wir andere Methoden !o]
Avatar billede donkazz Nybegynder
12. april 2007 - 14:50 #2
det er faktisk en række div's der har onclick="location.href=''" på sig, so der andere Methoden... ehm... jetz? Mit tyske er knapt så godt ;-)
Avatar billede roenving Novice
12. april 2007 - 15:06 #3
Så må du finde en måde, at identificere hele striben på en entydig måde ...

Hvis de alle sammen har/er links, er det ikke noget problem, men er der nogle imellem, der ikke har lnks, så skal der være en måde, hvorpå man kan springe disse over,både ved disabling og regenerering !-)

Skitse:

var onclicks = [];

//Skal udføres ved dragstart
var divs = dragDiv.getElementsByTagName("div");
for(i=0,im=divs.length;im>i;i++){
  onclicks[onclicks.length] = divs[i].onclick;
  divs[i].onclick = null;
}

//Skal udføres ved dragslut
for(i=0,im=divs.length;im>i;i++){
  divs[i].onclick = function(){onclicks[i]};//jeg ved ikke om function(){} er nødvendig, men der kan du jo prøve dig frem
}
Avatar billede roenving Novice
12. april 2007 - 15:07 #4
Hrm, nok:

var onclicks = [],divs;

//Skal udføres ved dragstart
divs = dragDiv.getElementsByTagName("div");

...
Avatar billede donkazz Nybegynder
13. april 2007 - 13:30 #5
function my_PickFunc()
{
        oste = dd.obj.name;
        document.getElementById(oste).style.border="1px dashed red";
        var ostes = document.getElementById(oste);
        divs = ostes.getElementsByTagName("div");
        for(i=0,im=divs.length;im>i;i++){
          onclicks[onclicks.length] = divs[i].onclick;
          divs[i].onclick = null;
        }           
}

hmmmm.... den siger "onclicks er udefineret" ? :-|
Avatar billede olebole Juniormester
13. april 2007 - 13:49 #6
<ole>

Du kunne evt. også kikke på MS' setCapture-metode (kunne evt. sættes på elementerne ved mouseover - og kan release'es igen ved mouseout):
    http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/methods/setcapture.asp

- der findes en tilsvarende til Gecko, men jeg kan ikke lige huske navnet/syntaksen - og jeg sidder ikke ved min egen maskine ligenu. Prøv evt. Google for yderligere info  ;o)

/mvh
</bole>
Avatar billede donkazz Nybegynder
13. april 2007 - 14:09 #7
Så lad os sige jeg har følgende:
<div id="ost">
  <div id="random1"></div>
  <div id="random2"></div>
  <div id="random3"></div>
  <div id="random4"></div>
</div>

Så kan man vha. javascript hente alle id's ud der ligger i "ost"? :-)
Avatar billede roenving Novice
13. april 2007 - 14:29 #8
Sagtens:

var osteDiv = document.getElementById("ost");
var childs = osteDiv.getElementsByTagName("div");
Avatar billede olebole Juniormester
13. april 2007 - 14:30 #9
var sId, a = document.getElementsByTagName("div");
for (var i=0,j=a.length; i<j; i++) {
    sId = a[i].getAttribute("id");
    if (typeof sId=="string" && sId.length>0) alert(sId);
}
Avatar billede roenving Novice
13. april 2007 - 14:31 #10
>>donkazz 13/04-2007 13:30:03

-- har du husket at definere onclicks som global variabel, der er et array ?-)

Uden for funktionen (som skrevet 12/04-2007 15:07:06 !-)

var onclicks = [],divs;
Avatar billede olebole Juniormester
13. april 2007 - 14:31 #11
- og naturligvis burde det have været:

var sId, a = document.getElementById("ost").getElementsByTagName("div");
for (var i=0,j=a.length; i<j; i++) {
    sId = a[i].getAttribute("id");
    if (typeof sId=="string" && sId.length>0) alert(sId);
}
Avatar billede donkazz Nybegynder
13. april 2007 - 14:37 #12
hænger dit, olebole, svar sammen med roenvings? Jeg er jo forvirret
Avatar billede olebole Juniormester
13. april 2007 - 14:47 #13
roenvings og mit eksempel er identiske ... jeg alert'er blot elementets id, dersom det har en sådan  =)
Avatar billede donkazz Nybegynder
13. april 2007 - 14:58 #14
kan jeg så gøre sådan her:

I stedet for:
if (typeof sId=="string" && sId.length>0) alert(sId);

Så bruge:
if (typeof sId=="string" && sId.length>0) document.getElementById(sId).onclick = null;

?

Umiddelbart virker det nemlig ikke..
Avatar billede olebole Juniormester
13. april 2007 - 15:12 #15
Det skulle da gerne virke
Avatar billede donkazz Nybegynder
23. april 2007 - 09:36 #16
Det virker!

Men ikke helt efter hensigten.. måske også fordi jeg har fucket lidt op..
Den alerter godt nok alle div'sne, men min onclick = false virker ikke..

Jeg oprettede for sjov en enkelt div, med en enkelt div inden i der så havde en onclick. Dér virkede det fint. Til geeengæld virker det ikke på den der ser sådan her ud, på trods af at den alerter div'sne fint:

<div id="oste">
<table>
<tr>
  <td>
  <div id="menu1" onclick="location.href='something.htm'">
    bla bla
    </div>
  </td>
  <td>
    <div id="menu2" onclick="location.href='something.htm'">
    bla bla
    </div>
  </td>
  <td>
    <div id="menu3" onclick="location.href='something.htm'">
    bla bla
    </div>
  </td>
  </tr>
</table>
</div>
Avatar billede donkazz Nybegynder
23. april 2007 - 09:53 #17
Jeg har løst det!

Jeg tror at problemet var at den nåede at eksekvere onclick før den blev sat null, så jeg lavede bare funktionen til at køre på body onload.

Perfeeekt!

Tak for hjælpen folkens, drop nogle svar så I kan få jeres hård fortjente point. :)
Avatar billede donkazz Nybegynder
23. april 2007 - 11:05 #18
Lige for at vende tilbage til roenvings første kommentar (lige inden pointsne ryger ud):

"-- er det simple links, dvs. at de kun benytter sig af href til at linke, for så kan du ved dragstart sætte en return false ind i onclick på dem alle, og ved dragslut sætte onclick til null !-)"

Dét problem har jeg faktisk nu i en anden div, så hvordan gør man det hurtigt og simpelt? :-D
Avatar billede donkazz Nybegynder
25. april 2007 - 11:22 #19
Drop mit sidste spørgsmål, fandt selv ud af det....

Smid et svar hvis I skal have points
Avatar billede roenving Novice
27. april 2007 - 12:34 #20
Velbekomme '-)
Avatar billede roenving Novice
27. april 2007 - 14:59 #21
-- og tak for 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